您的位置:首页 > 大数据 > 人工智能

Bundle传值,页面跳转返回值,频繁切换图片和显示密码---------handlerObtainMessage--Sendtotarget

2016-12-22 18:08 645 查看
1.页面跳转Bundle传值:
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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: