2013-03-10 5 views
1

복수 선택을 처리하고 클릭을 감지 할 수있는 ListView을 구현하고 싶습니다. 각 목록에 체크 박스가 포함되기를 원합니다. 확인란을 클릭하면 선택 사항을 기억하게되고, 줄의 텍스트를 클릭하면 다른 활동으로 이동하게됩니다.다중 선택 목록보기

어떻게하면됩니까?

답변

0

Adapter으로 ListView을 만들어야합니다.

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

+0

그것은 내가 목록을 채우는 데 사용되는 개체의, 당신은 할 수 repl 문자열로 에이스. –

+0

내 XML이 이렇게되어야합니까? <이미지 뷰 로이드 : ID = "@ + ID/browser_image" 로이드 : layout_width = "40dp" 로이드 : layout_height = "40dp" 로이드 : SRC = "@ 묘화/폴더"/> <텍스트 뷰 로이드 : ID = "@ + ID/browser_file_name" 로이드 : layout_width = "android : text_size = "17sp"/> – galvan