1
我想實現一個ListView
,它可以處理多種選擇並檢測點擊。 我希望每個列表都包含一個複選框,因此如果您單擊該複選框,它會記住該選項,並且如果單擊該行中的文本,它將轉到另一個活動。帶多項選擇的ListView
我該怎麼做?
我想實現一個ListView
,它可以處理多種選擇並檢測點擊。 我希望每個列表都包含一個複選框,因此如果您單擊該複選框,它會記住該選項,並且如果單擊該行中的文本,它將轉到另一個活動。帶多項選擇的ListView
我該怎麼做?
您需要創建一個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>
@Emil_Adz MiniTask的類型是什麼意思 – galvan 2013-03-10 00:53:23
它是我用來填充列表的對象,你可以repl用串來贏得它。 – 2013-03-10 00:54:50
和我的XML應該是這樣的? <複選框 機器人:ID = 「@ + ID/checkBox1」 機器人:layout_width = 「WRAP_CONTENT」 機器人:layout_height = 「WRAP_CONTENT」/> –
galvan
2013-03-10 01:00:20