添加新项目时,Android listView 不会更新

标签 android listview android-arrayadapter

我正在尝试创建一个应用程序,您可以在其中将来自另一个 Activity 的字符串添加到列表中,但每次我将新字符串添加到列表中时,它都会替换旧字符串。
我该如何解决这个问题?

列表所在的代码。

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


        Button button = (Button) findViewById(R.id.addBtn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               startActivity(new Intent(ShowList.this, AddToList.class));
            }
        });

        Intent i = getIntent();
        Bundle b = i.getExtras();
        if(b!=null) {
            String textToList = b.getString("listText");
            List<String> stuff = new ArrayList<String>();
            final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, stuff);
            ListView list = (ListView) findViewById(R.id.listView);
            list.setAdapter(adapter);
            adapter.add(textToList);
            adapter.notifyDataSetChanged();
        }

    }

xml文件代码:

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".ShowList">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Add"
    android:id="@+id/addBtn"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="List:"
    android:id="@+id/textView"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
    android:layout_centerHorizontal="true"
    android:layout_above="@+id/addBtn"
    android:layout_below="@+id/textView" />

输入文本的文件代码:

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

    final Bundle b = new Bundle();
    final Intent i = new Intent(AddToList.this, ShowList.class);
    final EditText text = (EditText)this.findViewById(R.id.listText);
    Button btn = (Button) findViewById(R.id.btnAdd);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String s = text.getText().toString();
            b.putString("listText", s);
            i.putExtras(b);
            startActivity(i);
        }
    });
}

最后是之前代码和平的xml代码:

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.mathias.listapp.AddToList">

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/listText"
    android:layout_alignParentTop="true"
    android:layout_marginTop="100dp"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:inputType="text"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="ADD"
    android:id="@+id/btnAdd"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true" />

最佳答案

发生这种情况是因为您每次进入 Activity 时都会创建一个新列表。因此,您保存列表的字段必须是“永久”字段。我建议您声明一个静态列表并检查它是否不为空:

列表所在的代码:

public class Nameofmyclass{
    static List<String> stuff;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_list);

        if(stuff==null){
            stuff = new ArrayList<String>();
        }

        ListView list = (ListView) findViewById(R.id.listView);
        Button button = (Button) findViewById(R.id.addBtn);

        final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, stuff);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               startActivity(new Intent(ShowList.this, AddToList.class));
            }
        });

        Intent i = getIntent();
        Bundle b = i.getExtras();
        if(b!=null) {
            String textToList = b.getString("listText");
            stuff.add(textToList);              
        }

        list.setAdapter(adapter);

    }
}

顺便说一下,您的代码中有几个“问题”:

  1. 您将项目添加到适配器,而不是列表
  2. 只有当您的包不为空时才初始化您的 ListView ,为什么?你的 ListView 每次都会保留,你不需要用这个检查初始化它
  3. 您在点击之外的其他类中创建了最终 Intent 。这在编程上没有错,但在这种情况下没有任何动机需要您这样做。最好像在第一个类中那样在点击内部进行本地操作

关于添加新项目时,Android listView 不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29318880/

相关文章:

Android ListView 一个项目中的多个图像

android - 如何使用 Kotlin 在 Fragment 中使用 ArrayAdapter

android-studio - 为什么我不能在 Kotlin 中初始化我的 ArrayAdapter?

Java 计时,System.nanoTime() 比 System.currentTimeMillis() 更胜一筹,但它会持续 sleep 吗?

android - 如何在 Kotlin 协程中使用 Sqldelight

python - 连接 ListView 和详细 View -django

vb.net - 无法将列添加到 vb.net 中的 ListView

Android 如何覆盖我的 ArrayAdapter 的过滤器?

android - 防止 recyclerview 在触摸事件时停止滚动

android - 获取应用内结算用户帐户详细信息