【发布时间】:2014-09-12 21:18:53
【问题描述】:
在arraylist中添加新数据后位置不会改变。
公共类 ItemsAdapter 扩展 BaseAdapter {
private Context context;
private LayoutInflater inflater;
private ArrayList<HashMap<String, String>> data;
public ItemsAdapter(Context context,
ArrayList<HashMap<String, String>> arraylist) {
this.context = context;
data = arraylist;
}
@Override
public int getCount() {
//=========HERE DATA IS COMING CORRECTLY===============
for (int i = 0; i < data.size(); i++)
System.out.println("Get Couunt Size : - "
+ data.get(i).get("Title"));
return data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Holder holder;
if (convertView == null) {
holder = new Holder();
convertView = inflater.inflate(R.layout.item, parent, false);
holder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
holder.tvNotes = (TextView) convertView.findViewById(R.id.tvNotes);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
//=========HERE POSITION ALWAYS 0===============
System.out.println("Position:::" + position + " Title : - "
+ data.get(position).get("Title") + ", Notes :- "
+ data.get(position).get("Note"));
holder.tvTitle.setText(data.get(position).get("Title"));
holder.tvNotes.setText(data.get(position).get("Note"));
return convertView;
}
private static class Holder {
TextView tvTitle, tvNotes;
}
}
我还在主活动中调用 notifyDataSetChanged() 方法。
使用对话框添加数据。
dlAddNote = new Dialog(this);
dlAddNote.setTitle("Add Note");
dlAddNote.setContentView(R.layout.add_note_dialog);
final EditText etTitle = (EditText) dlAddNote
.findViewById(R.id.etTitle);
final EditText etNotes = (EditText) dlAddNote
.findViewById(R.id.etNotes);
Button btnSave = (Button) dlAddNote.findViewById(R.id.btnSave);
Button btnCancel = (Button) dlAddNote.findViewById(R.id.btnCancel);
btnSave.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("Title", etTitle.getText().toString());
hashMap.put("Note", etNotes.getText().toString());
System.out.println("Title" + etTitle.getText().toString());
System.out.println("Note" + etNotes.getText().toString());
arrayListLeft.add(hashMap);
dlAddNote.dismiss();
leftAdapter = new ItemsAdapter(KeepGuiActivity.this,
arrayListLeft);
listViewLeft.setAdapter(leftAdapter);
leftAdapter.notifyDataSetChanged();
}
});
btnCancel.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dlAddNote.cancel();
}
});
dlAddNote.show();
我正在使用自定义对话框并在运行时添加数据但不更改数据。
【问题讨论】:
-
你的意思是当你添加一个项目时它没有显示??
-
是的。我添加数据但不改变适配器中的位置
-
你能把代码贴在你添加数据的地方吗?
-
对话框是否只调用一次?
-
@Rod_Algonquin,它只显示第一个项目,之后它不显示更新的项目,每次位置都返回 0 :(
标签: android android-arrayadapter