Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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 如何在基本适配器中的按钮上添加新项_Java_Android_Arraylist_Android Listview - Fatal编程技术网

Java 如何在基本适配器中的按钮上添加新项

Java 如何在基本适配器中的按钮上添加新项,java,android,arraylist,android-listview,Java,Android,Arraylist,Android Listview,我试图在按钮按下时创建一个新的ListView项目,我想我有一些bug,但由于我是这个主题的新手,我不知道在哪里 我多次尝试重写代码,尝试使用notifyDataSetChanged();-它什么也不做 尝试在这里搜索其他主题。。。 以下是我的MainActivity.java: public Button btn; private ListView lv; private CustomeAdapter customeAdapter; public ArrayList<EditModel&

我试图在按钮按下时创建一个新的ListView项目,我想我有一些bug,但由于我是这个主题的新手,我不知道在哪里

我多次尝试重写代码,尝试使用notifyDataSetChanged();-它什么也不做 尝试在这里搜索其他主题。。。 以下是我的MainActivity.java:

public Button btn;
private ListView lv;
private CustomeAdapter customeAdapter;
public ArrayList<EditModel> editModelArrayList;

int populateListMaxNum  =3;
int listNumber = populateListMaxNum;

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

    lv = (ListView) findViewById(R.id.listView);
    btn = (Button) findViewById(R.id.btn);

    editModelArrayList = populateList();
    customeAdapter = new CustomeAdapter(this,editModelArrayList);
    lv.setAdapter(customeAdapter);

    /* TODO activate button */

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           addToList();
            Toast.makeText(getApplicationContext(), "button", Toast.LENGTH_LONG).show();

        }
    });


}

private ArrayList<EditModel> populateList(){ //this part works perfectly

    ArrayList<EditModel> list = new ArrayList<>();

    for(int i = 0; i < populateListMaxNum; i++){
        EditModel editModel = new EditModel();
        //editModel.setEditTextValue(String.valueOf(i));
        list.add(editModel);
    }

    return list;
}
/*TODO make it work = expand */

private void addToList(){  // this part doesn't work nor it doesn't fail

    EditModel editModel = new EditModel();

    editModelArrayList.add(editModel);
    customeAdapter.notifyDataSetChanged();
}

}
公共按钮btn;
私有ListView lv;
私人CustomeApter CustomeApter;
公共ArrayList编辑模型ArrayList;
int populateListMaxNum=3;
int listNumber=populateListMaxNum;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.ListView);
btn=(按钮)findViewById(R.id.btn);
editModelArrayList=populateList();
customeAdapter=新的customeAdapter(这是editModelArrayList);
lv.设置适配器(自定义适配器);
/*TODO激活按钮*/
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
addToList();
Toast.makeText(getApplicationContext(),“button”,Toast.LENGTH_LONG.show();
}
});
}
private ArrayList populateList(){//这部分功能非常好
ArrayList=新建ArrayList();
for(int i=0;i
下面是我的CustomeAdapter.java类: 公共类CustomeApter扩展BaseAdapter{

    private Context context;
    public static ArrayList<EditModel> editModelArrayList;

    public CustomeAdapter(Context context, ArrayList<EditModel> editModelArrayList) {

        this.context = context;
        CustomeAdapter.editModelArrayList = editModelArrayList;
    }

    @Override
    public int getViewTypeCount() {
        return getCount();
    }
    @Override
    public int getItemViewType(int position) {

        return position;
    }

    @Override
    public int getCount() {
        return editModelArrayList.size();
    }

    @Override
    public Object getItem(int position) {
        return editModelArrayList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;

        if (convertView == null) {
            holder = new ViewHolder();
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.lv_item, null, true);

            holder.editText = convertView.findViewById(R.id.editid);

            convertView.setTag(holder);
        }else {
            // the getTag returns the viewHolder object set as a tag to the view
            holder = (ViewHolder)convertView.getTag();
        }

        holder.editText.setText(editModelArrayList.get(position).getEditTextValue());

        holder.editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                editModelArrayList.get(position).setEditTextValue(holder.editText.getText().toString());

            }

            @Override
            public void afterTextChanged(Editable editable) {

            }


        });

        return convertView;
    }

    private class ViewHolder {

        protected EditText editText;

    }

}
私有上下文;
公共静态ArrayList editModelArrayList;
公共CustomeAdapter(上下文上下文,ArrayList editModelArrayList){
this.context=上下文;
CustomeAdapter.editModelArrayList=editModelArrayList;
}
@凌驾
public int getViewTypeCount(){
返回getCount();
}
@凌驾
public int getItemViewType(int位置){
返回位置;
}
@凌驾
public int getCount(){
返回editModelArrayList.size();
}
@凌驾
公共对象getItem(int位置){
返回editModelArrayList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终持票人;
if(convertView==null){
holder=新的ViewHolder();
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
convertView=充气机。充气(R.layout.lv_项,空,真);
holder.editText=convertView.findViewById(R.id.editid);
convertView.setTag(支架);
}否则{
//getTag将viewHolder对象集作为标记返回给视图
holder=(ViewHolder)convertView.getTag();
}
holder.editText.setText(editModelArrayList.get(position.getEditTextValue());
holder.editText.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
editModelArrayList.get(位置).setEditTextValue(holder.editText.getText().toString());
}
@凌驾
public void PostTextChanged(可编辑){
}
});
返回视图;
}
私有类视窗持有者{
受保护的编辑文本;
}
}
我希望创建一个新的列表项(EditText+TextView),但什么也没发生(除了Toast消息) (经过一些调整后,由于arrayindexoutofboundsexception length=3 index=3错误,应用程序崩溃,但不在此设置中)
以下是所有必需的文件:

lv_item.xml中的主线性布局具有匹配的父级高度。尝试将其更改为包装内容。好像一排就占据了整个屏幕