Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从EditText和按钮/初始化对象填充ArrayList_Java_Android_Object_Arraylist_Android Arrayadapter - Fatal编程技术网

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

Java 如何从EditText和按钮/初始化对象填充ArrayList,java,android,object,arraylist,android-arrayadapter,Java,Android,Object,Arraylist,Android Arrayadapter,您好,我如何使用EditText和按钮来填充我的ArrayList,问题是我不知道如何从EditText初始化对象,然后将其添加到我的ArrayList 多谢各位 //主要活动 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst

您好,我如何使用
EditText
按钮来填充我的
ArrayList
,问题是我不知道如何从
EditText
初始化对象,然后将其添加到我的
ArrayList

多谢各位

//主要活动

  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);
    }
}
//ArrayAdapter

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

}

}
公共类ToLoadAdapter扩展了ArrayAdapter{
私有上下文;
国际资源;
私有列表对象=新的ArrayList();
公共Todoadapter(@NonNull上下文,int资源,@NonNull ArrayList对象){
超级(上下文、资源、对象);
this.mresource=资源;
this.mcontext=上下文;
this.objects=对象;
}
@非空
@凌驾
公共视图getView(最终整数位置,@Nullable View convertView,@NonNull ViewGroup父级){
字符串todo=getItem(位置).getTodo();
LayoutFlater充气机=LayoutFlater.from(mcontext);
convertView=充气机。充气(mresource,父项,false);
最终复选框=(复选框)convertView.findViewById(R.id.checkBox2);
box.setText(todo);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(box.isChecked()){
//延迟观看动画
Handler=newhandler();
handler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
objects.remove(getItem(position));//您的对象列表中有iten
notifyDataSetChanged();//如果您使用的是回收器视图。
}
},300);//添加0.3秒延迟
}
}
});
返回视图;
}
}

首先用XML或java为按钮添加侦听器

activity\u main

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

在onCreate中添加上述代码,请记住,在将数据添加到
todolist
之前,您必须验证
编辑文本
数据,否则应用程序可能会崩溃。

您好,谢谢您的回答我已经完成了您所说的所有操作,当我单击“添加”按钮时,我的应用程序正在关闭,它会显示“继续停止”@你能从logcatFATAL EXCEPTION发布错误详细信息吗?主要进程:com.example.alexandre.hei,PID:16153 java.lang.IllegalStateException:无法为android执行方法:onClick EDIT:将错误放入主post@Blebhebhe我很高兴能为您提供帮助,尽管您以前的方法,edittext和适配器的行为类似于局部变量,仅在oncreate中可用method@Blebhebhe不是真的,但是当您有一个需要稍后修改的对象(适配器、列表、todo)时,最好将它们保留在方法之外(特别是当它们是重对象时,如适配器、列表、按钮、edittext等)。谢谢,它起作用了!对不起,我似乎不能接受多重回答:(没关系,不用担心,我很乐意帮助你。
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();
            } 
        });