UI效果(5): 实现Activity刷新

目前刷新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()方法来创建控件。


©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页