Bundle传值,页面跳转返回值,频繁切换图片和显示密码---------handlerObtainMessage--Sendtotarget
2016-12-22 18:08
645 查看
1.页面跳转Bundle传值:
2.子线程Bundle传值到主线程:
3.单页面跳转返回值
MainActivity:
第一种方法:全局变量,不行--因为activity-oncreate就直接执行了,起不到效果
第二种方法:做一个广播 耦合低
第三种方法:onResume接收值
注意:onresume空指针的原因:
刚开始进入activity的时候会执行onResume,会打印一个空值,如果不判断是否为空的话,就会报空指针错误,就不能subString()
5.activity页面跳转生命周期:A到B
A的onpause调用,B的oncreate,onstart,onresume被调用,A的onstop被调用
6.频繁切换改变图片和显示隐藏密码
MainActivity:
注意:
子线程传递message给主线程:
第一种:
handler.obtainMessage(3).sendToTarget();
单用可行,但是要传递message不行,比如:
Message message = new Message();
message.obj = result;
handler.obtainMessage(3,message).sendToTarget();
同样地,用bundle传递message也不行:
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putString("aaa",result);
message.setData(bundle);
handler.obtainMessage(3,message).sendToTarget();
第二种:
Message message = handler.obtainMessage(3);
message.obj = result;
handler.sendMessage(message);
同样地,用bundle传值也可以:
Message message = handler.obtainMessage(3);
Bundle bundle = new Bundle();
bundle.putString("aaa",result);
message.setData(bundle);
handler.sendMesssage(message);
总结:
不传递数据:
handler.obtainMessage(3).sendToTarget();
传递数据:
Message message = handler.obtainMessage(3);
handler.sendMessage(message);
总之:
就是不能用
Message message = new Message();
handler.obtainMessage(3,message).sendToTarget();
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent it = new Intent(MainActivity.this, SecondActivity.class); Bundle bundle = new Bundle(); bundle.putString("name", "aaa"); it.putExtras(bundle); startActivity(it); } }); Intent intent = getIntent(); Bundle bundle = intent.getExtras(); String name = bundle.getString("name"); Log.i(TAG, "onCreate: " + name);
2.子线程Bundle传值到主线程:
package com.ruru.project_1210; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class MainActivity extends AppCompatActivity { private static final String TAG = "info"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new Thread() { @Override public void run() { super.run(); //子线程中要进行耗时操作 比如请求网络 Message message = new Message(); Bundle bundle = new Bundle(); bundle.putString("name", "你好"); message.setData(bundle); handler.sendMessage(message); } }.start(); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bundle bundle = msg.getData(); String name = bundle.getString("name"); Log.i(TAG, "handleMessage: " + name); } }; }
3.单页面跳转返回值
MainActivity:
package com.ruru.project_1210; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; public class MainActivity extends AppCompatActivity { private static final String TAG = "info"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent it = new Intent(MainActivity.this, SecondActivity.class); startActivityForResult(it, 1); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data == null) { return; } if (requestCode == 1 && resultCode == 1) { String name = data.getStringExtra("name"); Log.i(TAG, "onActivityResult: " + name); } } }SecondActivity:
package com.ruru.project_1210; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; public class SecondActivity extends AppCompatActivity { private static final String TAG = "info"; private String name = "冬日暖阳"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent it = new Intent(); it.putExtra("name", name); it.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); setResult(1, it); finish(); } }); } }4.多个页面连续跳转返回值:
第一种方法:全局变量,不行--因为activity-oncreate就直接执行了,起不到效果
第二种方法:做一个广播 耦合低
第三种方法:onResume接收值
注意:onresume空指针的原因:
刚开始进入activity的时候会执行onResume,会打印一个空值,如果不判断是否为空的话,就会报空指针错误,就不能subString()
5.activity页面跳转生命周期:A到B
A的onpause调用,B的oncreate,onstart,onresume被调用,A的onstop被调用
6.频繁切换改变图片和显示隐藏密码
MainActivity:
package com.ruru.project_1210; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.ImageView; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final String TAG = "info"; private EditText et_name; private ImageView img_clear; private ImageView img_name; boolean isChanged = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initBtn(); } private void initBtn() { //刚进来时隐藏密码 et_name.setTransformationMethod(PasswordTransformationMethod.getInstance()); } private void initView() { et_name = (EditText) findViewById(R.id.et_name); img_clear = (ImageView) findViewById(R.id.img_clear); img_name = (ImageView) findViewById(R.id.img_name); img_clear.setOnClickListener(this); img_name.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.img_clear: et_name.setText(""); break; case R.id.img_name: changeImg(); break; default: break; } } private void changeImg() { if (isChanged) { Log.i(TAG, "changeImg: " + "BBB"); img_name.setImageDrawable(getResources().getDrawable(R.mipmap.img_nodisplay_pass)); //隐藏密码 et_name.setTransformationMethod(PasswordTransformationMethod.getInstance()); } else { Log.i(TAG, "changeImg: " + "AAA"); img_name.setImageDrawable(getResources().getDrawable(R.mipmap.img_display_pass)); //显示密码 et_name.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); } isChanged = !isChanged; } }activity_main:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#EBD6D1" tools:context="com.ruru.project_1210.MainActivity"> <EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入密码" android:background="@null"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@id/et_name" android:layout_centerVertical="true" android:orientation="horizontal"> <ImageView android:id="@+id/img_clear" android:layout_width="16dip" android:layout_height="16dip" android:src="@mipmap/img_clear" /> <ImageView android:id="@+id/img_name" android:layout_width="20dip" android:layout_height="20dip" android:layout_gravity="center_vertical" android:layout_marginLeft="25dip" android:layout_marginRight="20dip" android:src="@mipmap/img_nodisplay_pass" /> </LinearLayout> </RelativeLayout>
注意:
子线程传递message给主线程:
第一种:
handler.obtainMessage(3).sendToTarget();
单用可行,但是要传递message不行,比如:
Message message = new Message();
message.obj = result;
handler.obtainMessage(3,message).sendToTarget();
同样地,用bundle传递message也不行:
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putString("aaa",result);
message.setData(bundle);
handler.obtainMessage(3,message).sendToTarget();
第二种:
Message message = handler.obtainMessage(3);
message.obj = result;
handler.sendMessage(message);
同样地,用bundle传值也可以:
Message message = handler.obtainMessage(3);
Bundle bundle = new Bundle();
bundle.putString("aaa",result);
message.setData(bundle);
handler.sendMesssage(message);
总结:
不传递数据:
handler.obtainMessage(3).sendToTarget();
传递数据:
Message message = handler.obtainMessage(3);
handler.sendMessage(message);
总之:
就是不能用
Message message = new Message();
handler.obtainMessage(3,message).sendToTarget();
相关文章推荐
- Handler.sendMessage 与 Handler.obtainMessage.sendToTarget比较
- 为form指定target属性值,就可以使跳转页面在相应的frameset中显示
- sendtoTarget()与sendtoMessage()
- servlet跳转后页面图片不显示
- servlet查询所有消息"List<Message>",并跳转到页面"messageList.jsp"进行显示
- 织梦根目录下面404页面,主页能正常运行404页面,切换至栏目页404页面内的图片不能正常显示,解决方案
- 带导航控制器,页面切换及图片显示 on 0523
- target 属性控制跳转页面的显示位置
- 实现xlistview+xutils展示数据之后点击item跳转页面显示图片缩放和放大
- 在同一页面显示/调用多个js幻灯图片切换
- js 页面 图片切换显示
- Handler — Send message to worker thread from main thread
- 利用setTimeout自动循环显示图片或自动刷新html页面
- Hibernate 对数据库Blob图片的查询操作---页面显示图片,文件的输出
- asp.net 2.0 下在login 页面中显示图片
- 将SQL Server 2000数据库Image类型图片数据显示在页面上
- 不刷新,点击上传图片,传完图片后,这个页面即刻显示图片?
- 从数据库读出的JPG文件的字符流,转换成图片显示在页面上的相关代码
- 在html页面用ajax的简单应用通过javascript得到数据库中的图片路径并在表格中显示出来
- 将图片保存到ORACEL数据库和读取数据显示到页面