[英]How to check the CheckBox of ListView when item clicked?
單擊項目時如何檢查ListView的CheckBox?
我有一個帶CheckBox,TextView,Button的ListView。
在這里,我想選擇多行ListView,以便使用CheckBox。 如果我單擊一行,我想要檢查其相應的CheckBox並獲取ListView的單擊項的RowID。
如果我點擊按鈕,我想打開一個彈出窗口或另一個屏幕(活動),但不能檢查CheckBox。
這該怎么做? 請幫忙。
提前致謝。
編輯:
這就是我的布局。
使用Adapter到ListView的代碼很簡單。
public class Adapter extends BaseAdapter{
private Context context;
Button btnView;
CheckBox box;
ArrayList<String> altextView1;
ArrayList<String> altextView2;
public Adapter(Context c, Button view, CheckBox checkBox, ArrayList<String> textView1, ArrayList<String> textView2) {
this.context=c;
this.btnView=view;
this.box=checkBox;
this.altextView1=textView1;
this.altextView2=textView2;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return altextView1.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
View view=arg1;
view=LayoutInflater.from(context).inflate(R.layout.list7, null);
TextView tv1=(TextView)view.findViewById(R.id.tV1);
TextView tv2=(TextView)view.findViewById(R.id.tV2);
btnView=(Button)findViewById(R.id.btnView);
box=(CheckBox)findViewById(R.id.cB);
tv1.setText(altextView1.get(arg0));
tv2.setText(altextView2.get(arg0));
return view;
}
}
將checkbox對象設置為行視圖的標記,可能是適配器的getView()方法中的'convertView'。
寫在行視圖上的單擊偵聽器上。
在單擊偵聽器內部,從onClick方法的視圖中查看getTag,並將其轉換為復選框,然后將setChecked設置為true,用於該復選框對象。
代碼可能看起來像這樣,
convertView.setTag(yourCheckBoxObject);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CheckBox cb = (CheckBox) v.getTag();
cb.setChecked(true);
}
});
你需要按照這個線程來學習它..只需閱讀整個線程並嘗試理解然后實現..這是你能得到的最好的幫助。 通過列表視圖檢查動態生成的復選框時出現問題
在你的自定義適配器中這樣做
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
Button textView = (Button) layoutInflater.inflate(R.layout.btn, null);
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//start activity or open pop-up
}
});
........
}
並在onListItemClick回調:
protected void onListItemClick(ListView l, android.view.View v, int position, long id) {
// using view v get check box and make it checked
CheckBox checkBox = (CheckBox) v.findViewById(R.id.checkbx);
};
希望這會有效。我沒有測試過。 請讓我知道結果。
首先,您需要在Java代碼中調用ListView上的setChoiceMode()來設置選擇模式,提供CHOICE_MODE_SINGLE或CHOICE_MODE_MULTIPLE作為值。 您可以通過getListView()從ListActivity獲取ListView。 您也可以通過布局XML中的android:choiceMode屬性聲明這一點。
然后,您不需要使用android.R.layout.simple_list_item_1作為ArrayAdapter構造函數中列表行的布局,而是需要使用
android.R.layout.simple_list_item_single_choice
要么
android.R.layout.simple_list_item_multiple_choice
分別用於單選或多選列表。
<?xml version="1.0" encoding="utf-8"?>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
android:choiceMode="multipleChoice"
/>
和java代碼可以
package com.commonsware.android.checklist;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class ChecklistDemo extends ListActivity {
private static final String[] items={"lorem", "ipsum", "dolor",
"sit", "amet","consectetuer", "adipiscing", "elit", "morbi", "vel",
"ligula", "vitae", "arcu", "aliquet", "mollis",
"etiam", "vel", "erat", "placerat", "ante",
"porttitor", "sodales", "pellentesque", "augue", "purus"};
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice,items));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.