如何从 EditText 和按钮填充 ArrayList/初始化对象
How to populate an ArrayList from EditText and a button / Initializing an object
你好,我如何用 EditText
和 button
填充我的 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
数据,否则应用可能会崩溃。
你好,我如何用 EditText
和 button
填充我的 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
数据,否则应用可能会崩溃。