Android,点击列表项后刷新listview

时间:2014-04-16 12:44:07

标签: android listview checkbox notifydatasetchanged

我有一个小问题,在我点击列表项后,项目上的复选框不会改变状态。更新工作完美,setChecked可能,但退出和重新运行活动后将出现更改。我阅读了很多关于notifyDataSetChange()的内容,它可能有用,但不是。我如何修复它,就像点击项目chechbox值后会发生变化。

public class SviatokPridajActivity extends Activity 
{   
private DatabaseOp mDbHelper;
ListView listview;
String username;

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

    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

    listview = (ListView) findViewById(R.id.listSviatok);

    showUserSettings(); 

    mDbHelper = new DatabaseOp(this);
    mDbHelper.open();

    Cursor sviatokCursor = mDbHelper.fetchAllSviatokNastav(username, 3);

    if (sviatokCursor.getCount()==0)
    {
        mDbHelper.naplnSviatky(username);
        sviatokCursor = mDbHelper.fetchAllSviatokNastav(username, 3);
    }

    final SviatokCursorAdapter adapter = new SviatokCursorAdapter(this, sviatokCursor);
    listview.setAdapter(adapter);

    listview.setOnItemClickListener(new OnItemClickListener() 
    {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int stlpec, long arg3) 
        {
            // TODO Auto-generated method stub
            Cursor cur = (Cursor) adapter.getItem(stlpec);
            String odosli = cur.getString(cur.getColumnIndex("_id"));
            String zobraz = cur.getString(cur.getColumnIndex("dlzka"));

            CheckBox check = (CheckBox)findViewById(R.id.checkBox);

            if (Integer.parseInt(zobraz)==0)
            {
                mDbHelper.updateSviatok(odosli, username, 1);
            } else {
                mDbHelper.updateSviatok(odosli, username, 0);
            }

            check.setChecked(!check.isChecked());

            adapter.notifyDataSetChanged();
        }
    });
}

@Override
public void onPause() 
{
    super.onPause();
    mDbHelper.close();
}

private void showUserSettings() 
{
    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    username = sharedPrefs.getString("prefUsername", "NULL");
}
}

4 个答案:

答案 0 :(得分:0)

您已在itemclick中检查了CheckBox,但未将其反映到itemList中,因此在调用adapter.notifyDataSetChanged();之前,您必须使用新更改刷新listItems。

答案 1 :(得分:0)

我在这里回答了这个问题:https://stackoverflow.com/a/22954806/1332870 你能检查一下吗?如果它不能解决您的问题,请告诉我

答案 2 :(得分:0)

重新加载Cursor而不是adapter.notifyDataSetChanged();使用adapter.changeCursor(reloadedCursor);

答案 3 :(得分:0)

不确定这是否是主线程上的压力,但您可以在点击方法中再次设置适配器。