使用列表视图和复选框进行多项选择

时间:2013-06-01 09:00:46

标签: android listview android-listview android-checkbox

我有一个listview,我希望使用复选框进行多项选择,但是当我添加时     android:choiceMode="multipleChoice"到我的XML文件,对方框的检查不合理。

需要双击ListView中的一行才能显示,单击它再次消失。

它没有android:choiceMode="multipleChoice",但是我将无法使用ListView。

getCheckedItemPositions()

任何人都知道为什么会这样?

<ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/nameList"
        android:choiceMode="multipleChoice"
        tools:listitem="@android:layout/simple_list_item_checked"
        android:layout_centerHorizontal="true" android:layout_alignParentTop="true"
        android:layout_above="@+id/button"/>

以下是Activity类中的代码。

listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, stringArray);
    playerList = (ListView)this.findViewById(R.id.nameList);
    playerList.setAdapter(listAdapter);

    //onClickListener
    playerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            CheckedTextView checkedTextView = (CheckedTextView) view;
            checkedTextView.toggle();
        }
    });

请提前帮助我.. Thanx

1 个答案:

答案 0 :(得分:1)

请查看以下代码。您的适配器类将如下所示。

import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView;

public class ListAdapter extends BaseAdapter {
    Context ctx;
    LayoutInflater lInflater;
    ArrayList<Position> arraylist;

    ListAdapter(Context context, ArrayList<Position> products) {
        ctx = context;
        arraylist = products;
        lInflater = (LayoutInflater) ctx
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return arraylist.size();
    }

    @Override
    public Object getItem(int position) {
        return arraylist.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            view = lInflater.inflate(R.layout.item, parent, false);
        }

        Position pos = getselectedposition(position);
        ((TextView) view.findViewById(R.id.Textview1)).setText(""+pos.position);
        CheckBox chkbox = (CheckBox) view.findViewById(R.id.cbBox);
        chkbox.setOnCheckedChangeListener(myCheckChangList);
        chkbox.setTag(position);
        chkbox.setChecked(pos.ischeckedflag);
        return view;
    }

    Position getselectedposition(int position) {
        return ((Position) getItem(position));
    }

    ArrayList<Position> getcheckedposition() {
        ArrayList<Position> checkedposition = new ArrayList<Position>();
        for (Position p : arraylist) {
            if (p.ischeckedflag)
                checkedposition.add(p);
        }
        return checkedposition;
    }

    OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            getselectedposition((Integer) buttonView.getTag()).ischeckedflag = isChecked;
        }
    };
}

请从以下链接下载源代码。

https://github.com/ItsRajesh4uguys/ListView_with_Checkboxes_Android

希望这会对你有所帮助。