2013-03-10 113 views
1

我想實現一個ListView,它可以處理多種選擇並檢測點擊。 我希望每個列表都包含一個複選框,因此如果您單擊該複選框,它會記住該選項,並且如果單擊該行中的文本,它將轉到另一個活動。帶多項選擇的ListView

我該怎麼做?

回答

0

您需要創建一個ListView自定義Adapter。這裏是一個複選框和一個可點擊的項目的列表視圖代碼:

private class MySecondAdapter extends ArrayAdapter<MiniTask> 
{ 
    private ArrayList<MiniTask> list; 

    public MySecondAdapter(Context context, int textViewResourceId, ArrayList<MiniTask> miniTaskList) 
    { 
     super(context, textViewResourceId, miniTaskList); 
     this.list = new ArrayList<MiniTask>(); 
     this.list.addAll(miniTaskList); 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) 
    { 
     miniTask = miniTaskList.get(position); 
     ViewHolder holder = new ViewHolder(); 
     { 
      LayoutInflater inflator = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflator.inflate(R.layout.check_list_item_new, null); 

      holder.title = (TextView) convertView.findViewById(R.id.tvItemTitle); 
      holder.commentsPicturesButton = (ImageView) convertView.findViewById(R.id.iAddCommetOrPicture); 
      holder.commentsPicturesButton.setTag(position); 
      holder.commentsPicturesButton.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) 
       { 
        Intent intent = new Intent(getApplicationContext(), PicturesAndCommentsActivity.class); 
        intent.putExtra(TasksListActivity.KEY_ID, task.getId()); 
        intent.putExtra("mini_task_text", miniTask.getTitle()); 
        startActivity(intent); 
       } 
      }); 
      holder.selected = (CheckBox) convertView.findViewById(R.id.cbCheckListItem); 
      holder.selected.setTag(position); 
      holder.selected.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) 
       {  
        {        
         Log.d(TAG, "pressed the checkbox: " + v.getId() + " in position: " + position + " tag: " +v.getTag() +" and item from array: " + miniTaskList.get(position)); 
         CheckBox checkbox = (CheckBox) v; 
         miniTaskList.get(position).setSelected(checkbox.isChecked()); 
         numOfCheckedMiniTasks = 0; 
         for(int i=0;i<miniTaskList.size();i++) 
         { 
          miniTask = miniTaskList.get(i); 
          if(miniTask.isSelected()) 
          { 
           numOfCheckedMiniTasks ++; 
          } 
         } 
         int percent = (int)(numOfCheckedMiniTasks * 100.0f)/miniTaskList.size(); 
         Log.d(TAG, "the percentage is: " +percent); 
         tasksRepository.get(tasksRepository.indexOf(task)).setMiniTasksPercentageComplete(percent); 
        } 
       } 
      });  
     } 

     holder.title.setText(miniTask.getTitle()); 
     holder.selected.setChecked(miniTask.isSelected()); 
     return convertView; 
    } 

ViewHolder

static class ViewHolder 
{ 
    TextView title; 
    CheckBox selected; 
    ImageView commentsPicturesButton; 
} 

和行佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@drawable/try2" 
android:orientation="vertical" > 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <CheckBox 
     android:id="@+id/cbCheckListItem" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:layout_marginBottom="10dp" 
     android:background="@drawable/checkbox_checklist_selector" 
     android:button="@drawable/checkbox_checklist_selector" /> 
    <TextView 
     android:id="@+id/tvItemTitle" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="5dp" 
     android:paddingRight="10dp" 
     android:paddingTop="13dp" 
     android:text="@string/checklist_item_string" 
     android:textColor="@color/my_darker_gray" /> 
    </LinearLayout> 

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="right" 
    android:paddingTop="6.5dp" > 

    <ImageView 
     android:id="@+id/iAddCommetOrPicture" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     android:contentDescription="@drawable/comment_or_photo_icon" 
     android:src="@drawable/comment_or_photo_icon" /> 
</RelativeLayout> 

+0

@Emil_Adz MiniTask的類型是什麼意思 – galvan 2013-03-10 00:53:23

+0

它是我用來填充列表的對象,你可以repl用串來贏得它。 – 2013-03-10 00:54:50

+0

和我的XML應該是這樣的? <複選框 機器人:ID = 「@ + ID/checkBox1」 機器人:layout_width = 「WRAP_CONTENT」 機器人:layout_height = 「WRAP_CONTENT」/> galvan 2013-03-10 01:00:20