点击"保存"我收到了EditText的文字。按钮和此文本保存到数据库,光标返回表单数据库,然后显示在Listview中。所有保存和获取操作都没有问题。当我单击“保存”按钮时,列表已动态刷新,但是当我单击“"删除"列表行中的按钮,即使光标更新,列表视图也不会自行刷新。
我不知道什么是错的...... 非常感谢帮助...
MainActivity' S oncreate:
function refresh(id){ //receive id
setTimeout (function(){
$('#message').load('load.php?id='+id); //add id variable to the url
refresh();
}, 2000);
}
我的ListAdapter类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DB = new DataBase(this,"CursorDatas",null,1);
ContextWrapper.setContext(getApplicationContext());
editText =(EditText) findViewById(R.id.edittext);
btnSave = (Button)findViewById(R.id.btn_save);
recordsList = (ListView)findViewById(R.id.list);
cursor = DB.getRecords();
listAdapter = new ListAdapter(this,cursor);
recordsList.setAdapter(listAdapter);
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str = editText.getText().toString();
DB.addRecord(str);
cursor = DB.getRecords();
listAdapter = new ListAdapter(getApplicationContext(),cursor);
recordsList.setAdapter(listAdapter);
}
});
}
列出Item.xml
public class ListAdapter extends CursorAdapter {
LayoutInflater inf;
ViewHolder vHolder;
DataBase DB;
Cursor cursor;
ListView lW;
ListeAdaptor listAdapter;
Context context;
public ListeAdaptor(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
inf = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inf.inflate(R.layout.activity_main, null);
lW = (ListView)v.findViewById(R.id.list);
DB = new DataBase(context,"CursorDatas",null,1);
this.context = context;
}
@Override
public void bindView(View arg0, Context arg1, Cursor arg2) {
// TODO Auto-generated method stub
vHolder = (ViewHolder)arg0.getTag();
vHolder.tV.setText(arg2.getString(arg2.getColumnIndex("Name")));
vHolder.btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = vHolder.tV.getText().toString();
DB.deleteRecords(isim);
cursor = DB.getRecords();
listAdapter = new ListAdapter(ContextWrapper.getContext(),cursor);
cursor.requery();
listAdapter.notifyDataSetChanged();
lW.setAdapter(listAdapter);
}
});
}
@Override
public View newView(Context arg0, Cursor arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
View v = inf.inflate(R.layout.list_item,null);
ViewHolder viewHolder = new ViewHolder(v);
v.setTag(viewHolder);
return v;
}
}
答案 0 :(得分:2)
有一个最佳解决方案,您无需再次更新和重新分配适配器并将其设置到列表视图。 你应该使用'CursorLoader'和CursorAdapter,它会自动管理你的listview的更新。这是链接。 http://developer.android.com/reference/android/content/CursorLoader.html