Android 应用程序崩溃“通过单击按钮使用BaseAdapter将EditText值添加到ListView”
我是android新手,通过单击按钮帮助了解如何使用BaseAdapter向ListView添加EditText值。当我在EditText中输入值并单击“添加”按钮时,值必须放在ListViwListView中,并且必须只有BaseAdapter。在此处尝试使用发现错误的代码,请帮助我完成我的代码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
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;
}
}