当前位置: 首页 > 知识库问答 >
问题:

多个按钮出现在我的列表上(Android Studio待办事项列表应用程序)

冯浩旷
2023-03-14

我一直在尝试用Android Studio制作一个待办事项列表应用程序。目的是在顶部有一个“添加新任务”按钮,它会打开一个对话框,我可以通过这个对话框输入新任务。然后任务会出现在按钮下方的列表中。

问题是按钮一直出现在列表中的每个任务后(重复的按钮是不可点击的)

问题截图

这是我的代码:

public class ListActivity extends Activity {
    // Declare variables

    Button button;
    private TaskDbHelper mHelper;
    private ArrayAdapter<String> mAdapter;
    private ListView mTaskListView;


    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        // Get the view from listview_main.xml
        setContentView(R.layout.activity_list);

        // Locate the button in activity_main.xml
        button = (Button) findViewById(R.id.NewTaskButton);
        mHelper = new TaskDbHelper(this);
        mTaskListView = (ListView) findViewById(R.id.listview);

        updateUI();
        NewMethod();
    }



    public void NewMethod() {
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                final EditText taskEditText = new EditText(ListActivity.this);
                AlertDialog alertDialog = new AlertDialog.Builder(ListActivity.this).create();
                alertDialog.setTitle("Add a new item");
                alertDialog.setMessage("What item would you like to add?");
                alertDialog.setView(taskEditText);
                alertDialog.setButton("Add item", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // here you can add functions
                        String task = String.valueOf(taskEditText.getText());
                        SQLiteDatabase db = mHelper.getWritableDatabase();
                        ContentValues values = new ContentValues();
                        values.put(TaskContract.TaskEntry.COL_TASK_TITLE, task);
                        db.insertWithOnConflict(TaskContract.TaskEntry.TABLE,
                                null,
                                values,
                                SQLiteDatabase.CONFLICT_REPLACE);
                        db.close();
                        updateUI();
                    }
                });


                alertDialog.show();  

            }

        });
    }

    private void updateUI() {
        ArrayList<String> taskList = new ArrayList<>();
        SQLiteDatabase db = mHelper.getReadableDatabase();
        Cursor cursor = db.query(TaskContract.TaskEntry.TABLE,
                new String[]{TaskContract.TaskEntry._ID, TaskContract.TaskEntry.COL_TASK_TITLE},
                null, null, null, null, null);
        while (cursor.moveToNext()) {
            int idx = cursor.getColumnIndex(TaskContract.TaskEntry.COL_TASK_TITLE);
            taskList.add(cursor.getString(idx));
        }

        if (mAdapter == null) {
            mAdapter = new ArrayAdapter<>(this,
                    R.layout.activity_list,
                    R.id.task_title,
                    taskList);
            mTaskListView.setAdapter(mAdapter);
        } else {
            mAdapter.clear();
            mAdapter.addAll(taskList);
            mAdapter.notifyDataSetChanged();
        }

        cursor.close();
        db.close();
    }
}

以下是xml:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff">

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#ffffff"
        android:divider="#C2AF00"
        android:dividerHeight="3sp"
        android:layout_below="@+id/task_title"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="14dp" />

    <TextView
        android:id="@+id/task_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello"
        android:textSize="20sp"
        android:layout_below="@+id/NewTaskButton"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="32dp" />

    <Button
        android:id="@+id/NewTaskButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/background_light"
        android:text="@string/NewTaskButton"
        android:textAppearance="@style/TextAppearance.AppCompat.Body2"
        android:textColor="#0089BF"
        android:textSize="18sp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="30dp"/>

</RelativeLayout>

共有1个答案

严修诚
2023-03-14

当你这么做的时候。。。

mAdapter = new ArrayAdapter<>(this,
                    R.layout.activity_list,
                    R.id.task_title,
                    taskList);

... 您应该传入要显示列表中单个项目的布局作为第二个参数。现在,您正在为每个列表项扩展您发布代码的布局。

您的每行布局可以是任何内容,但重要的是,它应该有一个文本视图,其中包含idR.id.task_title,以匹配您的构造函数调用,以便ListView知道将您提供给它的字符串放在哪里。举个最简单的例子,这可能是您的行布局:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/task_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

但是你可以添加一个ViewGroup作为根元素,并构建你想要的任何布局,只要你为其指定了id的文本视图存在。

 类似资料:
  • 该插件为待办事项列表组件提供了简单的功能。 用法 该插件可以作为 jQuery 插件或使用数据 API 激活。 数据 API 通过向 ul 元素添加 data-widget="todo-list" 来激活插件。如果你需要提供 onCheck 和 onUncheck 方法,请使用 jQuery API。 jQuery jQuery API 提供了更多可自定义的选项,允许开发人员处理待办事项列表中的选

  • 我正在使用AngularJS制作一个简单的待办事项列表应用程序。我实际上使用的是一个ASP.NET MVC模板,但到目前为止,我已经设法通过使用Angular和Bootstrap使所有的工作都正常。

  • 我正在主干网中处理一个示例待办事项列表项目,我想了解框架希望我如何在嵌套列表场景中组织其视图和模型。 为了阐明我的意思,我的单页主干应用程序应该显示待办事项列表。从后端的角度来看,有一个列表资源和一个项目(todo列表中的一个条目)资源。大致如下: 周一的杂务 芹菜 由于我的是Rails 3.2应用程序,我模糊地遵循Railscasts的主干。js教程,这就是我获取当前设计的来源。我很想知道我是否

  • 问题内容: 假设我在一行中有一个和两个按钮,如何在不突出显示整个行的情况下区分哪个按钮被轻拍了? 对于此示例代码,当点击该行中的任何一个按钮时,将同时调用两个按钮的动作回调。 问题答案: 您需要使用 BordlessButtonStyle() 。

  • 我是Android开发新手,所以我只想问一下,我该如何把这些事情做好。我已经做了一个杂货清单应用程序,将显示数量,项目名称和状态(复选框)。以下是我的问题: 列表上的项目或项目名称未显示 如果我有这么多问题,我很抱歉,如果你能帮我回答这些问题,我将不胜感激。谢谢!:) 杂货模型类 GroceryList活动 数组接口 我的XML文件

  • 问题内容: 我需要创建一个RadioButtons列表,但是如果尝试使用ListView进行创建,则可以同时选择所有单选按钮,但是我需要同时选择1个单选按钮。因此,我可以尝试以下代码: 但是布局不会显示所有项目,因为布局很小。我需要滚动条或其他方式来执行任务。请帮帮我。 问题答案: 您应该将其设置为单模式。为此,添加到包含您的布局: