刷新界面及传值的方法

这篇博客探讨了在Android应用中常见的界面刷新和传值方法,包括利用Activity的生命周期如Onresume()和Onrestart(),onActivityResult进行刷新和传值,使用广播以及接口回调。还特别提到了如何在自定义View和Activity之间通过接口实现传值,并举例说明了时间弹窗的监听。作者期待读者分享可能遗漏的技术点,以共同完善知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在很多的App中都涉及到界面刷新的问题和传值的问题:

这里我总结了下界面刷新:

1.很多人都会利用Activity的生命周期来刷新列表

  常见的有Onresume()  和Onrestart();

  到家都知道Activity的生命周期,当前的Activity重新显示的时候,onCreate()方法不会被执行,但是Onrestart()和Onresume方法一定会被执行,所以不少的人都在这里刷新界面。

2.onActivityResult 也是大家经常使用的,这个更为灵活,还可以在Activity之间传值  (刷新和传值)

//启动的代码

        Intent intent = new Intent(context,NewIncraditActivity.class);	
	startActivityForResult(intent, 1);

//回调刷新界面

<pre name="code" class="html">public void onActivityResult(int requestCode, int resultCode, Intent data) {
//如果传值过来就用data.getXX()来接收

}
//调用回调onActivityResult	
Intent intent = new Intent();
setResult(2);//如果不需要回传值的话就可以这样通知刷新  如果需要传值的话就用intent.putXX();


3.广播(刷新界面和传值)

  //注册广播

String myAction = "AAAA";
ReceiveBroadCast receiveBroadCast = new ReceiveBroadCast()
 IntentFilter filter = new IntentFilter();
filter.addAction(myActionName); // 只有持有相同的action的接受者才能接收此广播</span>
		registerReceiver(receiveBroadCast, filter);
	}
// 定义一个BroadcastReceiver广播接收类:
public class ReceiveBroadCast extends BroadcastReceiver{
	@Override
	public void onReceive(Context context, Intent data) {
		String actionName = data.getAction();
			if (actionName.equals(actionName)) {
			// 得到广播中得到的数据,并显示出来
				if (data != null) {
					tv_functionName.setText(data.getStringExtra("function"));
		}
}
}
}

//注销广播

//	一定要在界面销毁的时候注销广播接收器
	@Override
	protected void onDestroy(){
		super.onDestroy();
		unregisterReceiver(receiveBroadCast);// 注销广播接收器
		AccountUtils.setFunction_Position(context, "");
	}
//发送广播

Intent intent = new Intent("AAAA");
	intent.putExtra("function", "行业");
	sendBroadcast(intent);

4.Intent传值想必大家每天都在用  新手自已传递对象时要实现序列化

5.接口回调(传值)

一般接口回调在Android中的应用都是暴露个接口将值传递出去,常见的就是自定义的View和Activity之间传值 

举个例子对时间弹出框的监听

1.写一个接口类,里面设置监听的方法onTimeListener()

public interface TimeLinstener {
/ * @function 时间监听
 * @param year 年 
 * @param month 月 
 * @param day 日
*  @param isclickit  true=至今被点击 false=至今没被点击
 * */
   void onTimeListener(int year,int month,int day,boolean isclickit);
}

//Dilog类 在自定义的类中(为接口TimeListener.onTimeListener()方法赋值)

public class TimeDiaglog extends Dialog{
	//时间
	private View view;
	private Button btn_cancle,btn_complete;
	private DatePicker picker ;
	private int y,m,d;
	TextView tv_uptonow;
	int year;
	int month;
	private Context context;
	/**
	 * @param code 
	 * */
	public TimeDiaglog(Context context,int code,String hideOrshow,String resumeType) {
		super(context);
		// TODO Auto-generated constructor stub
		view = this.getLayoutInflater().inflate(R.layout.popudatepicker, null);
		view.setBackgroundColor(Color.WHITE);
		picker = (DatePicker) view.findViewById(R.id.datePicker1);
		 //通过反射机制,访问private的mDaySpinner成员,并隐藏它
    		 try {
		        Field daySpinner =picker.getClass().getDeclaredField("mDaySpinner");
		        daySpinner.setAccessible(true);
		        if(code==2){
		        	  Field monthSpinner =picker.getClass().getDeclaredField("mMonthSpinner");
		        	  monthSpinner.setAccessible(true);
		        }
		        ((View)daySpinner.get(picker)).setVisibility(View.GONE);
     		} catch (NoSuchFieldException e) {
       			  e.printStackTrace();
	 	} catch (IllegalArgumentException e) {
    			  e.printStackTrace();
    		} catch (IllegalAccessException e) {
       			 e.printStackTrace();
                }
		btn_cancle = (Button) view.findViewById(R.id.btn_cancle_date);
		btn_complete = (Button) view.findViewById(R.id.btn_complete_date);
		tv_uptonow = (TextView) view.findViewById(R.id.tv_uptonow);
		if (hideOrshow.equals("start")) {
			tv_uptonow.setVisibility(View.GONE);
		}else{
			if(resumeType.equals("E")){
				tv_uptonow.setText("Present");
			}
		}
		btn_cancle.setOnClickListener(dataClick);
		btn_complete.setOnClickListener(dataClick);
		tv_uptonow.setOnClickListener(dataClick);
		//获取屏幕信息
		Window window = getWindow();
		this.setCanceledOnTouchOutside(false);
		this.requestWindowFeature(window.FEATURE_NO_TITLE);
		DisplayMetrics dm = new DisplayMetrics();
		window.getWindowManager().getDefaultDisplay().getMetrics(dm);
		int screenHeigh = dm.heightPixels;
		LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,(int)(screenHeigh/2.3) ); 
		this.setContentView(view,params);
		this.show();
	}
	TimeLinstener linstener;
	public void  setValue(TimeLinstener linstener){
		this.linstener = linstener;
	}
	android.view.View.OnClickListener dataClick  = new android.view.View.OnClickListener() {
		
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			switch (v.getId()) {
			case R.id.btn_cancle_date:
				dismiss();
				break;
  			 case R.id.btn_complete_date:
            			 y =picker.getYear();
            			 m = picker.getMonth();
            			 d = picker.getDayOfMonth();
            			 setValue(linstener);
            			 linstener onTimeListener(y, m, d,false);
            			 dismiss();
				break;
        		case R.id.tv_uptonow:
        	 		setValue(linstener);
        			 dismiss();
				 break;
			
			}
		}
	};
   	
}

//Activity的调用(在Activity中回调接口,实现TimeListener)
public class AddProjectperActivity extends ActionBarActivity implements TimeLinstener{
	EditText edt_project_duty, edit_projectname, edit_companyname,
			edit_dutyname, edt_project_history, edt_project_desc;
	RelativeLayout relat_starttime, relat_end_Time;
	TextView tv_content, tv_content2,mymoney_tial;// 开始时间,结束时间
	Context context;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_add_projectper);
		context = this;
		showTimerDialog();
		}
		public void showTimerDialog(int code,String show){
		TimeDiaglog diaglog = new TimeDiaglog(context, code, show,"C");
			diaglog.setValue(this);
		}
		@Override
		public voidonTimeListener(int year, int month, int day, boolean isclickit) {//获得接口暴露的时间值
		// TODO Auto-generated method stub
		if(isclickit){ 
			tv_content2.setText("至今"); experience.setEndMonth(-1);experience.setEndYear(-1);
		}else{
		if (show.equals("start")) {
			tv_content.setText(year + "-" + (month + 1));experience.setStartMonth((month + 1));experience.setStartYear(year);
		} else {
			tv_content2.setText(year + "-" + (month + 1));experience.setEndMonth((month + 1));experience.setEndYear(year);
		}
	    }
	};
 }

大家,这是我总结的,有什么遗漏的希望能告诉我,让我完善下知识!!







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值