2012-04-03 3 views
0

목록보기의 각 항목에있는 각 스위치에 별도의 수신기를 설정하려고합니다. 어떻게해야합니까? 어떤 도움을 주시면 더 좋구요사용자 지정 목록보기에서 스위치에 대한 수신기를 설정하는 방법은 무엇입니까?

private void setQueues(final JSONObject[] qInfo) 
{ 
    queues = new QueueItem[qInfo.length]; // QueueItem consists of a string(label) and a boolean(value) 

    for(int i = 0; i < qInfo.length; i++) 
    { 
     queues[i] = new QueueItem(); 
     //final int ii = i; 

     // Formatting the queue title 
     String name = qInfo[i].optString("name").replace("-", " "); 
     name = name.replace("_", " "); 
     name = name.replace("ipinion", ""); 
     name = name.replace(" ", " "); 
     name = capitalizeFirstLetters(name); 
     queues[i].label = name; 

     try { 
      if(qInfo[i].getString("active").contains("1")) 
      { 
       Log.d("QBox", "Queue: Checkbox " + i + " : Checked TRUE"); 
       queues[i].value = true; 
      } 
      else 
      { 
       Log.d("QBox", "Queue Checkbox " + i + " : Checked FALSE"); 
       queues[i].value = false; 
      } 
     } 
     catch (JSONException e) 
     { 
      e.printStackTrace(); 
     } 

    } 

    lv.setAdapter(new QueueAdapter(getActivity(), 
      R.layout.queues_items, queues)); 
} 

:

내 비동기 작업에서 호출되는 방법은 setQueues입니다. 나는 아주 명백한 무엇인가 놓치는 것처럼 느낀다.

편집 : QueueAdapter에서의 getView 방법 :

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    QueueHolder holder = null; 

    if(row == null) 
    { 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new QueueHolder(); 
     holder.queueswitch = (Switch)row.findViewById(R.id.queues_item_switch); 
     holder.txtLabel = (TextView)row.findViewById(R.id.queues_item_text); 

     row.setTag(holder); 
    } 
    else 
    { 
    holder = (QueueHolder)row.getTag(); 
    } 

    QueueItem queue = data[position]; 
    holder.txtLabel.setText(queue.label); 
    holder.queueswitch.setChecked(queue.value); 
    // Is this where you would set up your listener?  

    return row; 
} 

답변

0
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    QueueHolder holder = null; 

    if(row == null) 
    { 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 
     holder = new QueueHolder(); 
     holder.queueswitch = (Switch)row.findViewById(R.id.queues_item_switch); 
     /* TRY PUTTING IT HERE */ 
     holder.txtLabel = (TextView)row.findViewById(R.id.queues_item_text); 

     row.setTag(holder); 
    } 
    else 
    { 
    holder = (QueueHolder)row.getTag(); 
    } 

    QueueItem queue = data[position]; 
    holder.txtLabel.setText(queue.label); 
    holder.queueswitch.setChecked(queue.value); 
    holder.queueswitch.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     //DO SOMETHING 
     } 
    }); 

    return row; 
} 

작동 것이이 방법! 확실하지는 않지만 "/ * 여기에 넣어 둡니다 * /"라고 쓰면 작동 여부는 확실치 않지만 onClickListener가 시작된 이후에 좋을 것입니다 ...

+0

"여기"에서 AsyncTask를 실행할 수 있습니까? – CodePrimate

+0

예! 왜 그럴까? – Ferdau

+0

한번만. 작업이 수행되는 동안 보여주고 싶은 진행 표시 줄에는 컨텍스트가 필요합니다. QueueAdapter가 ArrayAdapter를 상속하므로 getActivity()가 작동하지 않습니다. – CodePrimate

관련 문제