我有listview和list_item布局包含imageview,textview和复选框。我的适配器包含sectionheader。当我点击listview项目使该复选框不可见时,当我再次点击该项目时,复选框将不可见。
ListView lv = (ListView) findViewById(R.id.friendsList);
lv.setFastScrollEnabled(true);
fbAdapter = new FbFriendsAdapter(this, 0);
lv.setAdapter(fbAdapter);
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
fbAdapter.getSelectedFriend();
String s = (String) ((TextView) view
.findViewById(R.id.friendName)).getText();
CheckBox cb = (CheckBox) view.findViewById(R.id.iv_check);
cb.setVisibility(View.VISIBLE);
cb.setChecked(true);
if (cb.isChecked()) {
Toast.makeText(FbFriendsListActivity.this, "selected " + s,
Toast.LENGTH_SHORT).show();
}
else{
//not working when i tried . setvisibilty gone of checkbox.
}
});
listitemlayout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp" >
<com.hashmash.utils.RoundedImageView
android:id="@+id/friendPhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:src="@drawable/fb_profileimgsm"
android:scaleType="centerCrop"
app:corner_radius="80dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="30dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/friendName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:text="#Name"
android:textColor="@color/instablue"
android:textSize="14sp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="right" >
<CheckBox
android:id="@+id/iv_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:visibility="visible" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
答案 0 :(得分:0)
你正在检查复选框,否则阻止。
cb.setChecked(true);
if (cb.isChecked()) {
Toast.makeText(FbFriendsListActivity.this, "selected " + s,
Toast.LENGTH_SHORT).show();
}
else{
cb.setVisibility(View.INVISIBLE); //or GONE if you don't need blank space occupied by checkbox
}
因此,您的复选框cb始终被选中,否则永远不会被执行。
只需删除
cb.setChecked(true);
它应该可以正常工作。
答案 1 :(得分:0)
我认为对于HashMap<Integer, Boolean>
可见的项目,您应该有ArrayList
或SparseBooleanArray
或CheckBox
。例如:
HashMap<Integer, Boolean> checkedItems = new HashMap<Integer, Boolean>();
当用户点击项目时:
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
HashMap<Integer, Boolean> checkedItems = new HashMap<Integer, Boolean>();
if (!checkedItems.containsKey(position))
checkedItems.put(position, false);
checkedItems.put(position, !checkedItems.get(position));
mAdapter.notifyDataSetChanged();
});
在适配器中根据此checkbox
显示HashMap
。
如果你这样做,那将是保证。 Android重绘滚动列表项目。因此,即使你正确的方式,复选框将在使用滚动时消失。
答案 2 :(得分:0)
我使用下面的代码段来获取它。
if (view.findViewById(R.id.iv_check).getVisibility() == View.VISIBLE) {
view.findViewById(R.id.iv_check).setVisibility(View.INVISIBLE);
} else {
view.findViewById(R.id.iv_check).setVisibility(View.VISIBLE);
}