目前刷新Acitivity,只想到几种方法。仅供参考,如果您有更好的方法,请赐教。
程序界面:
点击refresh view可以刷新界面,点击write content可以在EditText中自动写入文字。
1. intent
package mark.zhang;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
public class RefreshActivityTest extends Activity {
private EditText showInfo = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
showInfo = (EditText) findViewById(R.id.show);
Log.d("mark", "refresh this activity!");
// 获取便于对比启动是哪个Activity
setTitle("taskId:" + this);
// 刷新
findViewById(R.id.button_refresh).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
refresh();
}
});
// 填写文字
findViewById(R.id.button_write).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showInfo.append("you have wrote successfully!\n");
}
});
}
/**
* 刷新
*/
private void refresh() {
finish();
Intent intent = new Intent(RefreshActivityTest.this, RefreshActivityTest.class);
startActivity(intent);
}
}
这种方式可以启动很多Activity实例,我们不停的点击refresh view这个按钮,就可以看到打印结果:
所以这种方式,如果没有finish()方法,那么会有很多Activity实例存在。假如你不使用finiish()方法的话,多次点击refresh view这个按钮,再点击手机的返回按钮,就会出现很多activity实例。
2. 调用回调方法onCreate
修改refresh()方法,如下:
/**
* 刷新
*/
private void refresh() {
/*finish();
Intent intent = new Intent(RefreshActivityTest.this, RefreshActivityTest.class);
startActivity(intent);*/
onCreate(null);
}
运行App,点击write content多次:
点击refresh view按钮:
可以看出,刷新ok!!!!!
这种方法,只有一个Activity实例。
3. invalidate()
这种方法,行不通,只是拿出来说一说。
/**
* 刷新
*/
private void refresh() {
LinearLayout layout = (LinearLayout) findViewById(R.id.ll);
layout.invalidate();
}
4. 重新加载布局文件
这个方法是第二种方法的子集,是一个有Bug的方法。
/**
* 刷新
*/
private void refresh() {
setContentView(R.layout.main);
}

点击refresh viiew:
但是,再次点击write content不会有效果。
主要是因为,重新加载xml文件之后,需要再次使用findViewById()方法来创建控件。