【问题标题】:How To Make Button Add EditText Input to a Listview如何使按钮将 EditText 输入添加到 Listview
【发布时间】:2016-06-12 17:34:38
【问题描述】:

我有一个保存按钮:

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Save"
        android:id="@+id/save"
        android:layout_below="@+id/editText"
        android:background="@android:color/holo_blue_light"
        android:textColor="@android:color/white"
        android:textSize="20dp"
        android:onClick="saveEvent"/>

当它被按下时,我希望它将 EditText 输入添加到 Listview。顺便说一下,Listview 和 EditText+Save Button 元素位于不同的 XML 布局上。

我有一个名为 SaveEvent 的活动,它在按下 Save 按钮时发生。如何使其将 EditText 输入添加到 ListView 元素?

非常感谢。

一段MakeEvent.java:

    public void saveEvent(View view) {
    Intent intent = new Intent(this, SaveEvent.class);
    startActivity(intent);
}

SaveEvent.java:

    package com.kass.planner;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import java.util.ArrayList;

public class SaveEvent extends Activity implements View.OnClickListener{

    private Button btn;
    private EditText et;
    private ListView lv;
    ArrayList<String> list = new ArrayList<String>();
    ArrayAdapter<String> adapter;

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

        btn = (Button) findViewById(R.id.save);
        btn.setOnClickListener(this);
        et = (EditText) findViewById(R.id.editText);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, list);

        // set the lv variable to your list in the xml
        lv = (ListView) findViewById(R.id.event_list);
        lv.setAdapter(adapter);
    }

    public void onClick(View v) {
        String input = et.getText().toString();
        if (input.length() > 0) {
            // add string to the adapter, not the listview
            adapter.add(input);
            // no need to call adapter.notifyDataSetChanged(); as it is done by the adapter.add() method
        }
    }

但是这段代码不起作用... ^ 谢谢。

【问题讨论】:

  • 假设您想在 SaveEvent 活动中显示该列表视图,此代码应该可以工作
  • 我认为您应该澄清“Listview 和 EditText+Save Button 元素位于不同的 XML 布局上”,因为您如何能够在单个 Activity 中引用这些布局上的不同视图?
  • 回应您的其他评论。从简单开始。所以一个 XML 和一个活动。根元素是一个垂直的 LinearLayout。它有 2 个元素。一个RelativeLayout 和一个ListView。在 RelativeLayout 内放置 EditText 和按钮。然后开始连接 Java 代码

标签: java android listview


【解决方案1】:

在板球运动员的启发下,重新审视我的一些旧程序 而不是更新适配器对象

只更新下划线数据 并调用以下方法将列表视图对象与更新的适配器对象绑定

public void fillList() {

    ArrayAdapter<String>   adapter= new ArrayAdapter<>(context,android.R.layout.simple_list_item_1,getItems());
    lv.setAdapter(adapter);

   }

我同意。内存效率不高,但效果很好

【讨论】:

  • 我对此表示怀疑,但你拥有所有闪亮的奖牌,你应该启发我。你有什么想法?投票不是那么快乐:-(
  • 我只是问你为什么认为这是解决方案,也许用更多细节更新答案会对其他有问题的人有用。为了启发您,首先,建议尝试运行代码或了解 API 的实现。例如,不需要重置适配器,因为适配器本身并没有改变,只有底层数据。其次,如果您尝试使用对问题的解释不清的描述运行此代码,我觉得列表应该按预期更新
  • 如果你有时间想发表评论吗?
  • 我不确定你想展示什么。您创建一个全新的适配器并使用新数据重新加载列表?我告诉你,试着用 ArrayAdapter 做一个简单的活动,用一些数据调用adapter.add,然后 ListView 会更新。您不需要添加到 Arraylist,但如果需要,您必须调用 adapter.notifyDatasetChanged。如果你有一个全新的 ArrayList 参考,你只重置适配器
  • notifyDataSetChanged 方法没有显示更新的数据,虽然我会试一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多