【问题标题】:refresh activity with updated variables使用更新的变量刷新活动
【发布时间】:2017-03-12 16:08:16
【问题描述】:

我无法在此处找到此问题的答案,但我有一个来自数据库的 ListView 活动。

String ascOrDescFilter = " ASC";
String columnFilter = "amount";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    helper = new DatabaseHelper(this);
    dbList= new ArrayList<DatabaseModel>();
    dbList = helper.getDataFromFilteredDB(columnFilter, ascOrDescFilter);`

我想刷新我的活动,同时放入用户可以在上下文菜单中更改的更新变量。

    @Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {
        case R.id.schedule:
            columnFilter="spare1";
            ascOrDescFilter= " ASC";
            //dbList = helper.getDataFromFilteredDB("spare1", " ASC");
            onRestart();
            return true;
        case R.id.amount:
            columnFilter="spare1";
            ascOrDescFilter= " ASC";
            //dbList = helper.getDataFromFilteredDB("balance", " DESC");;
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}

我认为我需要调用 onRestart 或 onResume?但我不确定如何为我的活动实施这些。我需要一个意图吗?正如您从上面的程序中看到的那样,我已经尝试使用 onStart 方法(以及 onResume + onRecreate),但没有任何东西可以让我的 Listview 刷新。

   @Override
public void onRestart()
{
    super.onRestart();
    startActivity(getIntent());
}

@Override
protected void onResume() {
    super.onResume();
}

//@Override
protected void onRecreate() {
    super.onResume();
    this.onCreate(null);
}

谢谢,任何指针都会很有帮助。这是我自己开发的第一个应用程序。

【问题讨论】:

  • 无需重新开始您的活动。只需更新列表视图。就像代码中的注释部分一样。它有效吗?如果不是,为什么?

标签: android listview android-activity android-sqlite refresh


【解决方案1】:

只需在您的 ListView 中使用 Adapter,当您更改数据时,只需更新列表中的数据并调用 adapter.notifyDataSetChanged()

如果您想编写自己的适配器,请从 BaseAdapter 扩展它,否则 ArrayAdapter 是最简单易用的。

这可能会让您开始使用适配器:https://guides.codepath.com/android/Using-an-ArrayAdapter-with-ListView

【讨论】:

  • 谢谢,尽管 notifyDataSetChanged() 对我完全不起作用,但我已将此标记为正确答案。我有我想要的工作,但我必须检查代码并弄清楚到底发生了什么。自周四以来,我一直对此感到困惑,所以这两个回复真的很有帮助。 @Schokokuchen Bäcker 我在搞乱代码以尝试找出问题所在,我知道这些值不匹配,但如果实现了 notifyDataSetChanged ,该代码应该可以工作。我在想 onResume 或 onRestart 是我的解决方案,所以感谢他们为我指明了正确的方向。
  • 不用担心。很高兴我能帮上忙!
猜你喜欢
  • 2015-04-20
  • 2011-08-23
  • 2013-03-19
  • 2011-10-14
  • 2017-02-16
  • 2022-08-17
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多