【问题标题】:Reload an Activity in Android programmatically以编程方式在 Android 中重新加载 Activity
【发布时间】:2025-11-25 15:15:01
【问题描述】:

我在一个页面和 ListView 中有一个列表视图,点击一个按钮我想重新加载页面,其中包含新的数据集。

package com.examples.listzones;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MyActivity extends Activity implements
    AdapterView.OnItemClickListener, View.OnClickListener {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ListView list = new ListView(this);
    setContentView(list);

    String[] items = { "Tom", "Sally", "Bill", "John", "Santiago", "Isabella" };

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        R.layout.review, R.id.textView1, items) {
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
        View row = super.getView(position, convertView, parent);

        View text = row.findViewById(R.id.seemore);
        text.setTag(position);
        text.setOnClickListener(MyActivity.this);

        return row;
      }
    };

    list.setAdapter(adapter);
    list.setOnItemClickListener(this);
  }

  @Override
  public void onClick(View v) {
    switch (v.getId()) {

    case R.id.seemore:

      // RELOAD THE PAGE WITH NEW SET OF DATA

      break;
    default:
      break;
    }
  }

  @Override
  public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    Toast.makeText(this, "Item Click " + position, Toast.LENGTH_SHORT).show();
  }
}

在 OnClick 内部,我想用新数据集加载页面。

【问题讨论】:

  • 我不建议重新加载您的完整活动。请看下面我的回答。尽管电池越来越好,设备越来越强大,但您仍在移动系统上开发,作为开发人员,您在某种程度上有责任节省资源:) 因此,如果您只需要更新数据,它会更有效率不要重新加载所有内容,因为当您重新加载完整的活动时会发生很多其他事情...... :)

标签: java android reload lifecycle


【解决方案1】:

您不必重新启动 Activity。您可以将新数据放入适配器并通知适配器数据集已更改。

adapter.clear();
adapter.addAll("new 1"," new 2","new 3");
adapter.notifyDataSetChanged();

【讨论】:

    【解决方案2】:

    在 onCreate() 中编写以下代码

    Intent thisIntent = getIntent();
    

    在下面写下你想重启活动的代码

    startActivity(thisIntent); 
    finish();
    

    【讨论】:

    • finish() 在这种情况下永远不会被调用,对吧?
    【解决方案3】:

    您可以在按下按钮时更新适配器。之后不要忘记在适配器上调用 notifyDatasetChanged。您也可以用新的适配器替换当前的适配器

    不要在 android 中这样的页面思考

    【讨论】:

      【解决方案4】:

      您可以将初始化内容从您的 onCreate() 方法移动到专用方法,例如init() 然后你可以从你的 onItemClick() 调用它。

      您也可以使用 ListView 适配器的 notifyDataSetChanged() 方法。

      【讨论】:

        最近更新 更多