关于listview 里写了CheckBok 点击事件不好用了的问题,原因是焦点传递到了子控件。
导致别的控件没焦点,只有checkbok有。
解决办法是在xml最外层里加一个阻止焦点传递到子控件的代码
<!–阻止焦点向子控件传递 android:descendantFocusability=”blocksDescendants” –>
//ListView嵌套CheckBok实现全选,单选,反选,取消,删除的操作:
//效果图:
//第一步 我的Activity布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/mQuanXuan"
android:text="全选"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<Button
android:id="@+id/mFanXuan"
android:text="反选"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<Button
android:id="@+id/mQuXiao"
android:text="取消"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<Button
android:id="@+id/mShanChu"
android:text="删除"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
</LinearLayout>
<ListView
android:id="@+id/mLV"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
//第二步 在Activity里具体代码实现:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button mQuanXuan;
private Button mFanXuan;
private Button mQuXiao;
private Button mShanChu;
private ListView mLV;
private List<String> mList;
private List<Boolean> mChecklist;
private Apader apader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
initApader();
}
private void initView() {
mQuanXuan = (Button) findViewById(R.id.mQuanXuan);
mFanXuan = (Button) findViewById(R.id.mFanXuan);
mQuXiao = (Button) findViewById(R.id.mQuXiao);
mShanChu = (Button) findViewById(R.id.mShanChu);
mLV = (ListView) findViewById(R.id.mLV);
mQuanXuan.setOnClickListener(this);
mFanXuan.setOnClickListener(this);
mQuXiao.setOnClickListener(this);
mShanChu.setOnClickListener(this);
}
private void initData() {
mList = new ArrayList<String>();
mChecklist = new ArrayList<Boolean>();
for (int i = 0; i < 20; i++) {
mList.add("奔波儿灞" + i);
mChecklist.add(false);
}
}
private void initApader() {
apader = new Apader(mList, MainActivity.this);
apader.setData(mList, mChecklist);
mLV.setAdapter(apader);
mLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mChecklist.set(position, !mChecklist.get(position));
apader.setData(mList, mChecklist);
apader.notifyDataSetChanged();
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.mQuanXuan:
select_all();
break;
case R.id.mFanXuan:
un_select();
break;
case R.id.mQuXiao:
cancel();
break;
case R.id.mShanChu:
delete();
break;
}
}
//全选
private void select_all() {
for (int i = 0; i < mChecklist.size(); i++) {
mChecklist.set(i, true);
}
apader.setData(mList, mChecklist);
apader.notifyDataSetChanged();
}
//反选
private void un_select() {
for (int i = 0; i < mChecklist.size(); i++) {
mChecklist.set(i, !mChecklist.get(i));
}
apader.setData(mList, mChecklist);
apader.notifyDataSetChanged();
}
//取消
private void cancel() {
for (int i = 0; i < mChecklist.size(); i++) {
if (mChecklist.get(i)) {
mChecklist.set(i, false);
}
}
apader.setData(mList, mChecklist);
apader.notifyDataSetChanged();
}
//删除
private void delete() {
for (int i = 0; i < mChecklist.size(); i++) {
if (mChecklist.get(i)) {
mChecklist.remove(i);
mList.remove(i);
i--;
}
}
apader.setData(mList, mChecklist);
apader.notifyDataSetChanged();
}
}
//第三步 我的ListView适配器:
public class Apader extends BaseAdapter {
private List<String> mList;
private Context context;
private List<Boolean> mCheckList;
public void setData(List<String> mList, List<Boolean> mCheckList) {
this.mList = mList;
this.mCheckList = mCheckList;
}
public Apader(List<String> mList, Context context) {
this.mList = mList;
this.context = context;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_layout, null);
ViewHolder viewHolder=ViewHolder.getViewHolder(convertView);
viewHolder.mText.setText(mList.get(position));
viewHolder.mCheck.setChecked(mCheckList.get(position));
viewHolder.mCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mCheckList.set(position,isChecked);
notifyDataSetChanged();
}
});
return convertView;
}
public static class ViewHolder {
public View rootView;
public TextView mText;
public CheckBox mCheck;
public ViewHolder(View rootView) {
this.rootView = rootView;
this.mText = (TextView) rootView.findViewById(R.id.mText);
this.mCheck = (CheckBox) rootView.findViewById(R.id.mCheck);
}
public static ViewHolder getViewHolder(View convertView) {
ViewHolder viewHolder = (ViewHolder) convertView.getTag();
if (viewHolder==null){
viewHolder=new ViewHolder(convertView);
convertView.setTag(viewHolder);
}
return viewHolder;
}
}
}
//第四步 我的ListView适配器布局:记得要加android:descendantFocusability=”blocksDescendants”
<?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="match_parent"
android:orientation="vertical"
android:descendantFocusability="blocksDescendants"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp">
<TextView
android:id="@+id/mText"
android:textSize="20sp"
android:textStyle="bold"
android:layout_marginLeft="10dp"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<CheckBox
android:id="@+id/mCheck"
android:layout_marginRight="10dp"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</RelativeLayout>
</LinearLayout>
//———————————————————————–完————————————————————————————-
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118388.html