单击listview的行中的按钮时,如何更新使用CursorAdapter的ListView

时间:2015-11-28 13:12:23

标签: android listview android-listview android-cursoradapter

点击"保存"我收到了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;
}

}

1 个答案:

答案 0 :(得分:2)

有一个最佳解决方案,您无需再次更新和重新分配适配器并将其设置到列表视图。 你应该使用'CursorLoader'和CursorAdapter,它会自动管理你的listview的更新。这是链接。 http://developer.android.com/reference/android/content/CursorLoader.html

相关问题