如何从 EditText 和按钮填充 ArrayList/初始化对象

How to populate an ArrayList from EditText and a button / Initializing an object

你好,我如何用 EditTextbutton 填充我的 ArrayList,问题是我不知道如何从 EditText 初始化一个对象,然后将它添加到我的 ArrayList

谢谢

//主要activity

  public class MainActivity extends AppCompatActivity {

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

        ListView view = (ListView)findViewById(R.id.listview);
        EditText edit = (EditText)findViewById(R.id.editText);
        Button button = (Button)findViewById(R.id.button);

        Todo eat = new Todo("Eat ");
        Todo sleep = new Todo("Sleep");

        ArrayList<Todo> todolist = new ArrayList<>();
        todolist.add(eat);
        todolist.add(sleep);

        Todoadapter adapter = new Todoadapter(this,R.layout.custom_adapter_layout,todolist);
        view.setAdapter(adapter);
    }
}

// 对象

public class Todo {
    private String todo;
    public Todo(String todo) {
        this.todo = todo;
    }
    public String getTodo() {
        return todo;
    }
    public void setTodo(String todo) {
        this.todo = todo;
    }
}

//ArrayAdapter

public class Todoadapter extends ArrayAdapter<Todo> {

private Context mcontext;
int mresource;
private List<Todo> objects = new ArrayList<>();

public Todoadapter(@NonNull Context context, int resource, @NonNull ArrayList<Todo> objects) {
    super(context, resource, objects);
    this.mresource = resource;
    this.mcontext = context;
    this.objects = objects;
}

@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {

    String todo = getItem(position).getTodo();
    LayoutInflater inflater = LayoutInflater.from(mcontext);
    convertView = inflater.inflate(mresource, parent, false);
    final CheckBox box = (CheckBox) convertView.findViewById(R.id.checkBox2);
    box.setText(todo);
    box.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(box.isChecked()){
                //Delay to see animation
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        objects.remove(getItem(position)); //Your object list where you have the itens
                        notifyDataSetChanged(); //If you are using a recycler view.
                    }
                },300); //adding 0.3 sec delay
            }
        }
    });
    return convertView;

}

}

首先在 XML 或通过 java

为按钮添加监听器

activity_main

<Button ...
  android:id="@+id/button"
  android:onClick="addTodo"/>

MainActivity.java

1.) 将适配器和列表实例设为全局 class

2.) 创建 addTodo 方法(保留 public 并添加 View 参数)

3.) 点击后,从edittext中获取数据,创建一个Todo实例并添加到列表中

4.) 通知适配器反映更改

public class MainActivity extends AppCompatActivity {
    // 1
    private ArrayList<Todo> todolist;
    private Todoadapter adapter;
    private EditText edit;

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

        ListView view = (ListView)findViewById(R.id.listview);
        edit = (EditText)findViewById(R.id.editText);
        Button button = (Button)findViewById(R.id.button);

        Todo eat = new Todo("Eat ");
        Todo sleep = new Todo("Sleep");

        todolist = new ArrayList<>();
        todolist.add(eat);
        todolist.add(sleep);

        adapter = new Todoadapter(this,R.layout.custom_adapter_layout,todolist);
        view.setAdapter(adapter);
    }
    // 2
    public void addTodo(View view){
        // 3
        todolist.add(new Todo(edit.getText().toString()));
        // 4
        adapter.notifyDataSetChanged();
    }
}
      buttonsetOnClickListener(new OnClickListener() {
            public void onClick(View v) {
            String data=edit.getText().toString();
            if(data.isEmpty())
            {
                Toast.makeText(getApplicationContext(), "Please enter data", Toast.LENGTH_LONG).show();
                return;
             }
               todolist.add(new Todo(data));
               adapter.notifyDataSetChanged();
            } 
        });

在您的 onCreate 中添加以上代码,请记住您必须在将数据添加到 todolist 之前验证 edit text 数据,否则应用可能会崩溃。