显示cab的自定义适配器中的android复选框
我尝试使用自定义适配器实现上下文操作栏(cab)。 首先,我用cab制作了简单的显示cab的自定义适配器中的android复选框,android,checkbox,android-adapter,Android,Checkbox,Android Adapter,我尝试使用自定义适配器实现上下文操作栏(cab)。 首先,我用cab制作了简单的ListView,它成功了。 其次,我尝试使自定义适配器包含复选框和文本视图。 cab的复选框,但它不起作用 public class MainActivity extends Activity { ListView lv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanc
ListView
,它成功了。
其次,我尝试使自定义适配器包含复选框
和文本视图
。
cab的复选框
,但它不起作用
public class MainActivity extends Activity {
ListView lv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<String> arr = new ArrayList<String>();
arr.add("1");
arr.add("2");
arr.add("3");
arr.add("4");
arr.add("5");
lv1 = (ListView)findViewById(R.id.listView1);
lv1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
lv1.setAdapter(new Adapters(this, R.layout.item, arr));
lv1.setMultiChoiceModeListener(new ModeCallback());
}
private class Adapters extends ArrayAdapter<String> implements OnCheckedChangeListener{
Context context;
ArrayList<String> arr;
CheckBox cb;
int position;
ViewGroup parent;
public Adapters(Context context, int resource, ArrayList<String> objects) {
super(context, resource, objects);
this.context = context;
this.arr = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = null;
if(v == null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.item, null);
}
TextView tv = (TextView)v.findViewById(R.id.tv1);
tv.setText(arr.get(position));
cb = (CheckBox)v.findViewById(R.id.cb1);
cb.setOnCheckedChangeListener(this);
this.parent = parent;
this.position = position;
return v;
}
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
((ListView)parent).setItemChecked(position, true);
}
}
private class ModeCallback implements ListView.MultiChoiceModeListener {
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
mode.setTitle("Select Items");
setSubtitle(mode);
return true;
}
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return true;
}
public void onDestroyActionMode(ActionMode mode) {
}
public void onItemCheckedStateChanged(ActionMode mode,
int position, long id, boolean checked) {
setSubtitle(mode);
}
private void setSubtitle(ActionMode mode) {
final int checkedCount = lv1.getCheckedItemCount();
switch (checkedCount) {
case 0:
mode.setSubtitle(null);
break;
case 1:
mode.setSubtitle("One item selected");
break;
default:
mode.setSubtitle("" + checkedCount + " items selected");
break;
}
}
}
公共类MainActivity扩展活动{
ListView lv1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList arr=新的ArrayList();
协议增补(“1”);
协议增补(“2”);
协议增补(“3”);
协议增补(“4”);
协议增补(“5”);
lv1=(ListView)findViewById(R.id.listView1);
lv1.setChoiceMode(ListView.CHOICE\u MODE\u MULTIPLE\u MODE);
lv1.setAdapter(新适配器(this,R.layout.item,arr));
lv1.setMultichoiceModelListener(newmodecallback());
}
私有类适配器扩展ArrayAdapter实现OnCheckedChangeListener{
语境;
ArrayList-arr;
复选框cb;
内部位置;
视图组父对象;
公共适配器(上下文、int资源、ArrayList对象){
超级(上下文、资源、对象);
this.context=上下文;
this.arr=对象;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=null;
如果(v==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
v=充气机充气(R.layout.item,空);
}
TextView电视=(TextView)v.findviewbyd(R.id.tv1);
tv.setText(arr.get(position));
cb=(复选框)v.findviewbyd(R.id.cb1);
cb.setOnCheckedChangeListener(此);
this.parent=parent;
这个位置=位置;
返回v;
}
@凌驾
检查更改后的公共无效(复合按钮视图,
布尔值(已检查){
((ListView)父项).setItemChecked(位置,true);
}
}
私有类ModeCallback实现ListView.MultiChoiceModelListener{
公共布尔onCreateActionMode(ActionMode模式,菜单){
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。主菜单,菜单);
mode.setTitle(“选择项”);
设置子标题(模式);
返回true;
}
公共布尔onPrepareActionMode(操作模式,菜单){
返回true;
}
公共布尔值onActionItemClicked(ActionMode模式,菜单项){
返回true;
}
公共void onDestroyActionMode(ActionMode模式){
}
已更改MCheckedStateChanged(操作模式,
int位置,长id,布尔值已选中){
设置子标题(模式);
}
私有void setSubtitle(操作模式){
final int checkedCount=lv1.getCheckedItemCount();
开关(已检查计数){
案例0:
mode.setSubtitle(空);
打破
案例1:
模式。设置子标题(“选定一项”);
打破
违约:
mode.setSubtitle(“+checkedCount+”所选项目”);
打破
}
}
}
问题未更改复选框
。
我真的很想知道这件事,
找不到任何类似的问题。事实上,问题是添加可聚焦的元素(如复选框或按钮)会禁用单击整个列表项的功能,并且必须禁用它们的可聚焦性。您也不应该向主布局添加任何可单击的标志 将xml中的复选框的聚焦设置为false
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"/>
谢谢您的回复,但我的问题不是这样。我添加了可聚焦并可以单击复选框。当我添加
((ListView)parent)时,setItemChecked(position,true);
复选框没有更改。