首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Android Studio中为ListView (每个列表)添加复选框

如何在Android Studio中为ListView (每个列表)添加复选框
EN

Stack Overflow用户
提问于 2021-03-10 12:19:42
回答 2查看 31关注 0票数 0

基本上,我正在创建一个任务/待办事项列表应用程序,但我无法弄清楚这一部分。我想在每个任务旁边添加一个复选框,并能够检查它们。

这是MainActivity.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MainActivity extends AppCompatActivity {

static ArrayList<String> notes = new ArrayList<>();
static ArrayAdapter arrayAdapter;


public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.main_menu, menu);

    return super.onCreateOptionsMenu(menu);
}


public boolean onOptionsItemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);
    if (item.getItemId() == R.id.add_note) {
        Intent intent = new Intent(getApplicationContext(),
                note_editor.class);
        startActivity(intent);
        return true;
    }
    return false;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ListView listView = (ListView) findViewById(R.id.listView);

    SharedPreferences sharedPreferences =
            getApplicationContext().getSharedPreferences
                    ("com.example.assignment1", Context.MODE_PRIVATE);


    HashSet<String> set = (HashSet<String>)
            sharedPreferences.getStringSet("notes", null);

    if (set == null) {
        notes.add("Add Your Task Hereee");
    } else {
        notes = new ArrayList(set);
    }


    arrayAdapter = new ArrayAdapter
            (this, android.R.layout.simple_list_item_1, notes);

    listView.setAdapter(arrayAdapter);


    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        public void onItemClick
        (AdapterView<?> adapterView, View view, int i, long l) {

            Intent intent = new Intent(getApplicationContext(),
                    note_editor.class);
            intent.putExtra("noteId", i);
            startActivity(intent);


        }

    });

我的main.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<RelativeLayout 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"
    tools:context=".MainActivity">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:id="@+id/listView" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:layout_marginEnd="32dp"
        android:layout_marginBottom="28dp"
        android:backgroundTint="#4BB3A9"
        android:src="@drawable/add_task"/>

</RelativeLayout>

我希望它看起来像这样“:I drew the checkboxes here

我还有另一个类,用于编辑任务以及启动画面,但我认为在这里没有必要这样做。任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2021-03-10 13:16:42

你可以使用回收器视图代替列表视图。参考代码如下:

创建自定义适配器并将其设置为您的回收器视图,并像recyclerView.setAdapter(CustomAdapter(new ArrayList("AAAAA","BBBBB","CCCCC","DDDDD"),getContext()));一样调用它

自定义适配器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class CustomAdapter extends ArrayAdapter<String> {

    private ArrayList<String> dataSet;

    // View lookup cache
    private static class ViewHolder {
        CheckedTextView checkedTextView;
    }

    public CustomAdapter(ArrayList<String> data, Context context) {
        super(context, R.layout.list_item, data);
        this.dataSet = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        // Check if an existing view is being reused, otherwise inflate the view
        ViewHolder viewHolder; // view lookup cache stored in tag

        if (convertView == null) {

            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.list_item, parent, false);
            viewHolder.checkedTextView = convertView.findViewById(R.id.check_box);
            viewHolder.checkedTextView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    viewHolder.checkedTextView.setChecked(!viewHolder.checkedTextView.isChecked());
                }
            });
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        viewHolder.checkedTextView.setText(dataSet.get(position));

        return convertView;
    }
}

每个列表项的XML代码: list_item.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<CheckedTextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/check_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:checked="false"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="Check Me"
/>
票数 1
EN

Stack Overflow用户

发布于 2021-03-10 12:28:52

您正在为您的ListView使用安卓默认布局,而此默认布局仅显示TextView,您必须为您的列表项视图和自定义ArrayAdapter创建自定义布局才能实现您想要的效果。

欲了解更多信息,请访问以下网址:https://javapapers.com/android/android-listview-custom-layout-tutorial/

作为RecyclerView的提示开关,哪个更有效:https://developer.android.com/guide/topics/ui/layout/recyclerview

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66564665

复制
相关文章
winfrom如何在listview中添加控件
private Button btn = new Button(); private void Form1_Load(object sender, EventArgs e) { ListViewItem[] lvs = new ListViewItem[3]; lvs[0] = new ListViewItem(new string[] { "行1列1", "行1列2", "" }); l
码农阿宇
2018/04/18
2.6K0
Android ListView列表分组
======================================================================== 以上为示例所有代码,以下为说明 禁止标签项的响应事件,父类BaseAdapter中提供了isEnable的()方法,我们看看这个方法:
forrestlin
2022/04/02
1.1K0
Android ListView列表分组
android listview添加headview
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163272.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/15
4410
Android listview 实现列表多选
具体实现: 1. 使用listview的多选模式: 在listview的布局中加入:android:choiceMode=”multipleChoice”
全栈程序员站长
2022/09/09
1.7K0
Android ListView等列表设置空布局
在Android平台上,listView 是特别常用的组件之一,我们在向用户展示列表数据时,通常要考虑: 列表有数据和无数据空的状态,因为网络环境各异,难免刷新失败什么的;
全栈程序员站长
2022/09/15
7840
fastadmin如何在列表的操作中添加其他按钮
fastadmin默认的列表操作中只有编辑和删除按钮,如果我们需要添加其他按钮,需要先找到对应的js文件。我们需要在初始化表格中添加buutons属性,原来的js代码如下:
高久峰
2023/06/03
4.3K0
如何在 TypeScript 中为对象动态添加属性?
在 TypeScript 中,我们经常需要在运行时动态添加属性到对象上。这是因为 TypeScript 是一种静态类型语言,类型系统在编译时会检查代码的类型安全性,所以在编译时我们无法确定对象上将要添加哪些属性。在本文中,我们将讨论如何在 TypeScript 中为对象动态添加属性,以及这样做的一些注意事项。
网络技术联盟站
2023/06/07
11.8K0
【说站】Python如何在列表中添加新值
1、append()将元素添加到集合,insert()将元素插入指定的下标应用程序,返回值为None。
很酷的站长
2022/11/24
4.2K0
【说站】Python如何在列表中添加新值
Android Studio添加arr依赖
compile(name: 'com.datescroller.lib-release', ext: 'aar')
程序员飞飞
2020/02/27
1.2K0
Android Studio 中 添加作者 时间 之类的 注释
3.点击 includes --- File Header, 然后 就在 右边的 编辑框 编辑 就好了
103style
2022/12/19
1K0
Android Studio 中 添加作者 时间 之类的 注释
点击加载更多

相似问题

在每个孩子中添加带有EditTexts的ListView - Android Studio

14

如何在Android的LISTVIEW中为每个raw添加不同的图像?

26

在ListView Android studio中为项目添加简单的导航

21

带有复选框的ListView android studio

122

如何在android可扩展listview中为列表项添加波纹效果

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文