Java 使用onlick not working更新ArrayList

Java 使用onlick not working更新ArrayList,java,android,arraylist,Java,Android,Arraylist,我制作了一个保存水果列表的Arraylist,我想在每次点击按钮时更新它。所以我在按钮上使用了onclick方法,并尝试使用EditText添加,但出现了一个错误,说无法解析添加符号 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList<Str

我制作了一个保存水果列表的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);

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

onClick方法在全局arrayList中添加的项具有引用名称水果,但使用本地arrayList的ListView也具有相同名称水果,因此不要在onCreate方法中创建本地列表。另外,在添加新的FROUT调用后,适配器上的NOTIFYDATASETCHETCHANGE也发生了更改

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();
}

因为,您的水果ArrayList是一个局部变量,仅在onCreate方法中可见

首先,您需要在onCreate方法之外声明水果。 其次,在添加到fruits ArrayList后,必须调用adapter.notifyDataSetChanged以反映listview中的更改


让我知道这是否有效

您需要在onCreate方法之外定义fruits arraylist。它应该是主活动的属性

欢迎来到堆栈溢出!寻求调试帮助的问题此代码为什么不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。实际上,notifyDataSetChanged方法不起作用,notify方法使应用程序崩溃