【问题标题】:Android, refresh listview after click on list itemAndroid,单击列表项后刷新列表视图
【发布时间】:2014-04-16 12:44:06
【问题描述】:

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

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");
}
}

【问题讨论】:

  • 你更新你的适配器了吗?

标签: android listview checkbox notifydatasetchanged


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您应该添加新项目并设置您的适配器,然后使用 notifyDataSetChanged
    【解决方案3】:

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

    【讨论】:

    • 什么是 reloadedCursor 或者我必须改变什么?
    • Cursor reloadedCursor= mDbHelper.fetchAllSviatokNastav(username, 3); 然后adapter.changeCursor(reloadedCursor);
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多