【问题标题】:Updating ArrayList with onlick not working使用 onclick 更新 ArrayList 不起作用
【发布时间】:2017-06-25 08:52:40
【问题描述】:

我制作了一个 Arraylist 来保存水果列表,并且我想在单击按钮时对其进行更新。所以我在按钮上使用了 onclick 方法并尝试使用 EditText 添加但弹出一个错误说无法解析添加符号。

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ArrayList<String> fruits = new ArrayList<String>();
    fruits.add("apple");
    fruits.add("banana");
    fruits.add("mango");
    fruits.add("orange");
    fruits.add("peach");

    ListAdapter myAdapter = new CustomAdapter(this,fruits);
    ListView mylist = (ListView) findViewById(R.id.list);
    mylist.setAdapter(myAdapter);

    mylist.setOnItemClickListener(
            new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String fruit = String.valueOf(parent.getItemAtPosition(position));
                    Toast.makeText(MainActivity.this,fruit,Toast.LENGTH_LONG).show();
                }
            }

    );


}

public void onClick (View view) {
    final EditText input = (EditText) findViewById(R.id.editText);
    String name = input.getText().toString();
    fruits.add(name);

【问题讨论】:

  • 欢迎来到 Stack Overflow!寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误重现它所需的最短代码在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example

标签: java android arraylist


【解决方案1】:

你有两个arrayList,一个是本地的,另一个是全局的。

onClick() 方法你在全局 arrayList 中添加你的项目,引用名称为 fruits 但你使用本地 arrayList 的 ListView 也有相同的名称 fruits,所以不要在 onCreate() 方法中创建本地列表。在您的适配器上添加新的水果调用notifyDataSetChanged() 之后也是如此。

ArrayList<String> fruits;
ListAdapter myAdapter;

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

    fruits = new ArrayList<String>();
    fruits.add("apple");
    fruits.add("banana");
    fruits.add("mango");
    fruits.add("orange");
    fruits.add("peach");

    myAdapter = new CustomAdapter(this,fruits);
    ....
}

public void onClick (View view) {
   final EditText input = (EditText) findViewById(R.id.editText);
   String name = input.getText().toString();
   fruits.add(name);
   myAdapter.notifyDataSetChanged();
}

【讨论】:

    【解决方案2】:

    因为,你的 fruits ArrayList 是一个仅在 onCreate() 方法中可见的局部变量。

    首先你需要在 onCreate() 方法之外声明水果。 其次,添加到fruitsArrayList后,必须调用adapter.notifyDataSetChanged()来反映listview的变化。

    让我知道这是否有效!

    【讨论】:

    • 其实notifyDataSetChanged()方法不起作用,notify()方法导致app崩溃
    【解决方案3】:

    您需要在 onCreate 方法之外定义水果数组列表。它应该是主要活动的财产。

    【讨论】:

      猜你喜欢
      • 2015-09-21
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多