ListView - 区分复选框选择和文本选择

时间:2014-11-05 08:21:50

标签: android android-listview

鉴于下面的ListView,我想根据用户是选择文本(创建新活动)还是单击相关复选框(将其添加到收藏夹列表)执行两个不同的操作。这可能与此设置有关,还是我必须使用自定义适配器甚至不同的布局?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </ListView>
</LinearLayout>


setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, teams));
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                String team_name = adapterView.getItemAtPosition(i).toString().trim();
                Intent intent = new Intent("blah.blah.blah");
                intent.putExtra("team", team_name);
                startActivity(intent);
            }
});

A

4 个答案:

答案 0 :(得分:0)

使用自定义适配器可以帮助您跟踪视图,这比使用您无法控制的默认适配器更容易。供参考:http://www.vogella.com/tutorials/AndroidListView/article.html#adapterown_custom

答案 1 :(得分:0)

如果我理解正确,你的ListView应该包含TextBox和CheckBox,TextBox和CheckBox是可点击的,而不是ListView本身。

为此,您必须制作自定义适配器,您将在其中为TextBox和CheckBox创建侦听器。

public class CustomAdapter extends BaseAdapter {

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        // your_costum_view should contain textbox and checkboc
        view = inflater.inflate(R.layout.your_costum_view, null);

        // Get your checkbox and textbox and add listeners
        TextView textView = (TextView) view.findById(R.id.textView);
        textView.setOnClickListener...

        Checkbox checkbox=(CheckBox)view.findById(R.id.checkBox);
        checkBox.setOnClickListener...


        return view;
    }

}

your_costum_view布局示例

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

答案 2 :(得分:0)

使用自定义适配器肯定会让您的生活更轻松。在适配器中,您可以同时参考复选框和textView,并为每个添加一个onClick侦听器 - 从那里您还可以添加代码来处理每个事件。我还建议使用recyclerView而不是ListView。这是Android 5.0中的新功能,它比普通的ListView更容易使用。希望这可以帮助: RecyclerView Help

答案 3 :(得分:0)

将CheckBox设置为可聚焦=&#34; false&#34;在您的XML布局中。

android:focusable="false"

如果不运行to this link并查看示例,因为您需要在列表视图中创建自定义行并设置:

Checkbox checkbox=(CheckBox)view.findById(R.id.checkboxID);
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            //do stuff

        }
    });