Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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
Android 应用程序崩溃“通过单击按钮使用BaseAdapter将EditText值添加到ListView”_Android_Listview_Android Listview - Fatal编程技术网

Android 应用程序崩溃“通过单击按钮使用BaseAdapter将EditText值添加到ListView”

Android 应用程序崩溃“通过单击按钮使用BaseAdapter将EditText值添加到ListView”,android,listview,android-listview,Android,Listview,Android Listview,我是android新手,通过单击按钮帮助了解如何使用BaseAdapter向ListView添加EditText值。当我在EditText中输入值并单击“添加”按钮时,值必须放在ListViwListView中,并且必须只有BaseAdapter。在此处尝试使用发现错误的代码,请帮助我完成我的代码 public class AddlistActivity extends Activity { ListView lstName; Button btnAdd; EditText edtName; S

我是android新手,通过单击按钮帮助了解如何使用BaseAdapter向ListView添加EditText值。当我在EditText中输入值并单击“添加”按钮时,值必须放在ListViwListView中,并且必须只有BaseAdapter。在此处尝试使用发现错误的代码,请帮助我完成我的代码

public class AddlistActivity extends Activity {
ListView lstName;
Button btnAdd;
EditText edtName;
String myData;
Context context=AddlistActivity.this;
ArrayList<ListDataActivity>list=new ArrayList<ListDataActivity>();

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

    lstName=(ListView)findViewById(R.id.lst_name);
    btnAdd=(Button)findViewById(R.id.btn_add);
    edtName=(EditText)findViewById(R.id.edt_name);
    getDataInList();

    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myData=edtName.getText().toString().trim();
            getDataInList();
            ((BaseAdapter)lstName.getAdapter()).notifyDataSetChanged();
        }
    });

    lstName.setAdapter(new MyBaseAdapterActivity(context,list));
}
private void getDataInList()
{
    for (int i = 0 ; i < myData.length();i++)
    {
        ListDataActivity listDataActivity = new ListDataActivity();
        listDataActivity.setMyData(myData);
        list.add(listDataActivity);
    }
}}
MyBaseAdapterActivity.java

public class ListDataActivity {
String myData;

public String getMyData()
{
    return myData;
}
public  void setMyData(String myDataa)
{
    myData=myDataa;
}}
public class MyBaseAdapterActivity extends BaseAdapter {

ArrayList<ListDataActivity> list =new ArrayList<ListDataActivity>();
LayoutInflater inflater;
Context context;

public MyBaseAdapterActivity(Context context,ArrayList<ListDataActivity>list)
{
    this.list=list;
    this.context=context;
    inflater = LayoutInflater.from(this.context);
}

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

@Override
public ListDataActivity getItem(int position) {
    return list.get(position);
}

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

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

    MyViewHolder myViewHolder;
    HashMap<String , Long >hashMap= new HashMap<String , Long>();

    if (convertView==null)
    {
        convertView=inflater.inflate(R.layout.activity_addlist,parent,false);
        myViewHolder=new MyViewHolder(convertView);
        convertView.setTag(myViewHolder);
    }else {
        myViewHolder =(MyViewHolder)convertView.getTag();
    }

    myViewHolder.editText=detials(convertView,R.id.edt_name,list.get(position).getMyData());

    return convertView;
}

private EditText detials(View v , int resId , String text)
{
    EditText et =(EditText)v.findViewById(resId);
    et.setText(text);
    return et;
}

private static class MyViewHolder{
   EditText editText;

    public MyViewHolder(View item)
    {
    }
}}

代码中存在一些逻辑问题。根据我的假设,您正在尝试创建一个动态列表,该列表根据按钮单击事件上EditText中的单词增长。代码如下:

在布局文件夹call list_cells.XML中创建XML

MyBaseAdapterActivity.java

public class ListDataActivity {
String myData;

public String getMyData()
{
    return myData;
}
public  void setMyData(String myDataa)
{
    myData=myDataa;
}}
public class MyBaseAdapterActivity extends BaseAdapter {

ArrayList<ListDataActivity> list =new ArrayList<ListDataActivity>();
LayoutInflater inflater;
Context context;

public MyBaseAdapterActivity(Context context,ArrayList<ListDataActivity>list)
{
    this.list=list;
    this.context=context;
    inflater = LayoutInflater.from(this.context);
}

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

@Override
public ListDataActivity getItem(int position) {
    return list.get(position);
}

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

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

    MyViewHolder myViewHolder;
    HashMap<String , Long >hashMap= new HashMap<String , Long>();

    if (convertView==null)
    {
        convertView=inflater.inflate(R.layout.activity_addlist,parent,false);
        myViewHolder=new MyViewHolder(convertView);
        convertView.setTag(myViewHolder);
    }else {
        myViewHolder =(MyViewHolder)convertView.getTag();
    }

    myViewHolder.editText=detials(convertView,R.id.edt_name,list.get(position).getMyData());

    return convertView;
}

private EditText detials(View v , int resId , String text)
{
    EditText et =(EditText)v.findViewById(resId);
    et.setText(text);
    return et;
}

private static class MyViewHolder{
   EditText editText;

    public MyViewHolder(View item)
    {
    }
}}
上面的代码应该可以工作。如果有错误,请在这里再次回复,我将尽力帮助您

原因:java.lang.NullPointerException:尝试调用虚拟机 空对象引用上的方法“int java.lang.String.length” 位于com.example.rahul.listviewwithbaseadapter.AddlistActivity.GetDataInListAddressActivity.java:48

在getDataInList方法中尝试调用myData.length时出现NullPointerException,因为myData为null


您忘记为getDataInList的第一次调用初始化myData。

发布日志以了解崩溃原因。您为什么更喜欢使用BaseAdapter进行此操作。您可以使用ArrayAdapter并调用ArrayAdapteradd方法将新数据添加到列表中。它将自动通知您的listView。我正在学习设置BaseAdapter@sembozDemirposable的副本
public class AddlistActivity extends Activity {

    ListView lstName;
    Button btnAdd;
    EditText edtName;
    String myData;
    Context context = AddlistActivity.this;
    ArrayList<ListDataActivity>list = new ArrayList<ListDataActivity>();
    MyBaseAdapterActivity baseAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_addlist);

        lstName=(ListView)findViewById(R.id.lst_name);
        btnAdd=(Button)findViewById(R.id.btn_add);
        edtName=(EditText)findViewById(R.id.edt_name);
        baseAdapter = new MyBaseAdapterActivity(AddlistActivity.this, list);
        lstName.setAdapter(baseAdapter);

        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myData = edtName.getText().toString().trim();
                setDataIntoList(myData);
                baseAdapter.updateMyList(list);
            }
        });
    }

    private void setDataIntoList(String data)
    {
     ListDataActivity tempListDataActivity = new ListDataActivity();
     tempListDataActivity.setMyData(data);
     list.add(tempListDataActivity);
    }
}
public class ListDataActivity {

    String myData;

    public String getMyData()
    {
        return myData;
    }

    public  void setMyData(String myDataa)
    {
        myData = myDataa;
    }
}
public class MyBaseAdapterActivity extends BaseAdapter {

    static class MyViewHolder {
        EditText editText;
    }

    private ArrayList<ListDataActivity> list;
    private MyViewHolder myViewHolder;


    public MyBaseAdapterActivity(Context context,ArrayList<ListDataActivity>list)
    {
        this.list = list;
        this.context = context;
    }

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

    @Override
    public ListDataActivity getItem(int position) {
        return list.get(position);
    }

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

    public void updateMyList(ArrayList<ListDataActivity> list) {
        this.list = list;
        this.notifyDataSetChanged();
    }

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

        if (convertView == null)
        {
            LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.list_cells, parent,false);

            myViewHolder = new MyViewHolder();
            myViewHolder.textView = (TextView) convertView.findViewById(R.id.list_cell_textview);
            convertView.setTag(myViewHolder);
        } else {
            myViewHolder =(MyViewHolder)convertView.getTag();
        }

        myViewHolder.textView.setText(list.get(position).getMyData());

        return convertView;
    }
}