1

我有一个小问题,单击列表项后,项目上的复选框不会改变状态。更新工作完美,可能是 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

4 回答 4

0

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

于 2014-04-16T13:22:36.323 回答
0

您已经检查了您的CheckBoxin itemclick,但它没有反映到您的 itemList 中,因此在调用之前adapter.notifyDataSetChanged();您应该必须用新的更改刷新 listItems。

于 2014-04-16T13:16:44.040 回答
0

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

于 2014-04-16T13:19:55.413 回答
0

不确定这是否对主线程造成压力,但您可以在 on click 方法中再次设置适配器。

于 2015-05-26T17:39:40.727 回答