管理listview onItemClick上的复选框可见性

时间:2014-10-10 12:55:28

标签: android listview checkbox

我有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>

3 个答案:

答案 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>可见的项目,您应该有ArrayListSparseBooleanArrayCheckBox。例如:

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);


                }