在另一个类中执行后更新一个类中的列表

时间:2016-01-28 20:55:20

标签: android

我有一个问题,我有两个活动,活动1和活动2.活动1包​​含我的SQLite数据库中的内容列表视图,活动2包含一个按钮,按下该按钮会对数据库执行查询。运行时的此查询将更改活动1列表中的信息。

当我按下按钮时,查询工作正常,但活动1中的列表视图不会更新。我知道我必须在列表视图上使用notifyDataSetChanged才能更新列表信息。

我的问题是如何在活动2中的按钮侦听器的活动1中的列表上调用此方法?

活动1中的Listview和适配器

   String[] columns = new String[] {adapter.KEY_CONTENTS_NAME, adapter.KEY_CONTENTS_MEASUREMENT, adapter.KEY_CONTENTS_UNIT};

    int[] to = new int[] {R.id.ingredientName, R.id.ingredientMeasurement, R.id.ingredientUnit};

    SimpleCursorAdapter myCursorAdapter = new SimpleCursorAdapter(this,R.layout.row2, cursor, columns, to, 0);

    ListView ingredientList = (ListView) findViewById(R.id.ingredientList);
    ingredientList.setAdapter(myCursorAdapter);

活动2中的按钮

Button cookButton = (Button) findViewById(R.id.cookButton);
    cookButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //simple SQL query
            //call to activity 2 to update the list
        }
    });

3 个答案:

答案 0 :(得分:-1)

您可以使用startActivityForResult启动活动。以下是文档和示例:http://developer.android.com/training/basics/intents/result.html

在第一项活动中你应该有这样的东西:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == SECOND_ACTIVITY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) { 
            // load data from db
            // add data to the list view (create a new adapter or clear the items from the old one and add the new items)
            // notifyDataSetChanged on adapter
        }
    }
}

在调用notifyDataSetChanged之前。再次从db加载信息(并检查它是否已更新)并将其添加到列表视图中。然后调用notifyDataSetChanged

答案 1 :(得分:-1)

然后在列表活动中编写此函数:

@onResume
public void onResume(){
    super.onResume();
    myCursorAdapter.notifyDataSetChanged();
}

当您返回该活动时,将调用此函数,您可以通过调用notifyDataSetChanged来通知此处的更改。

答案 2 :(得分:-1)

您可以使用startActivityForResult来实现此目的。

第一个活动中,如果您想使用startActivityForResult启动此类第二个活动。

Intent myIntent = new Intent(FirstActivity.this, SecondActivity.class);
int FIRST_ACTIVITY_CODE = 100
startActivityForResult(intent, FIRST_ACTIVITY_CODE);

在您的第二次活动中进行点击时,您希望setResult正常,然后退出活动以返回第一个活动。

Button cookButton = (Button) findViewById(R.id.cookButton);
    cookButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //simple SQL query
            setResult(RESULT_OK);
            finish();
        }
    });

第一次活动中,您必须覆盖onActivityResult,然后更新您的列表。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == FIRST_ACTIVITY_CODE) {
      myCursorAdapter.notifyDataSetChanged();
   }
}

因此,您可以使用onActivityResult与活动进行通信。如果您想将从第二个活动中的SQL查询返回的数据传递到第一个活动,可以使用setResult(int resultCode, Intent data)