数据传递
首先是两个activitiy之间数据的传递,视频里讲通过Bundle来传递数据,当时区编辑框数据的时候出了错误,问了一下大佬,大佬说可以用intent直接传,现在用一个编辑框输入数据点击按钮打开另一个Activity,并且把数据显示在打开的Activity页面上,是String类型的传递。
先创建两个Activity,在一个xml文件里写一个编辑框,一个按钮。在另一个xml文件里写一个文字框。
MainActivitiy.java传数据的java代码
/*
在Activity间传递数据
1,得到写在编辑框的数据,新建一个Intent
2,利用putExtra方法将数据传给intent
3,在第二个页面,用getExtra方法把数据取出
*/
Button tiaozhuan=findViewById(R.id.xianshi);
tiaozhuan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
edi_dizhi=findViewById(R.id.dizhi);
dianhua=edi_dianhua.getText().toString();
intent.putExtra("d",dizhi);
startActivity(intent);
}
}
);
Main2Activity.java接收数据并显示
Intent intent=getIntent();
dizhi=intent.getStringExtra("d");
textView=findViewById(R.id.xianshi);
textView.setText(dizhi);
传递数据还是很简单的。然后视频上又讲了一个可以返回数据的例子,这里返回的是图片,参考的是咱们平时点击更换头像,然后出现一个显示几张图片,点击其中一张图片,我们可以返回上一个页面并且显示头像已经更换成我们刚才选择的那张图。
返回数据
Activity1的xml文件里写一个ImageView组件,要有id属性,再加一个Button组件,也要有id。Activity2的xml文件里,我们选择网格视图来显示图片。所以加一个GridView组件,这个组件里面要显示图片,所以也要有id;
new一个Intent,但是使用的startActivityForResult方法(这个方法我还没查是啥原理,就这么用吧),那个0x11可以换成别的。这个丫子我们就可以跳转到另一个页面了。
MainActivitiy.java
change=findViewById(R.id.change);
change.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivityForResult(intent,0x11);
}
});
首先我们要给第二个页面里面加图片,但是我们的图片要通过Adapter来添加,我也不晓得为啥子,反正用就对了。回头搞懂了再回来改。
Main2Activitiy.java
//把图片路径添加到int数组里
int path[]=new int[]{
R.mipmap.img1,R.mipmap.img2,R.mipmap.img3,R.mipmap.img4,
R.mipmap.img5,R.mipmap.img6,R.mipmap.img7,R.mipmap.img8,
R.mipmap.img9,R.mipmap.img10,R.mipmap.img11,R.mipmap.img12
};
GridView gridView=findViewById(R.id.touxiang);
BaseAdapter adapter=new BaseAdapter() {
@Override
public int getCount() {
return path.length;//这个要是你int数组的长度,因为要查个个吧
}
@Override
public Object getItem(int i) {
return i;//这个跟着return他的形参就行了
}
@Override
public long getItemId(int i) {
return i;//这个也是
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ImageView imageView;//新建一个ImageView,因为你要往里加图片
if (view==null){
imageView=new ImageView(Main2Activity.this);
imageView.setAdjustViewBounds(true);//这个是啥还没查
imageView.setPadding(5,5,5,5);//这个是边距,嘿嘿嘿
}
else{
imageView=(ImageView)view;
}
imageView.setImageResource(path[i]);//调用这个方法,把int数组里存的图片路径给他
return imageView;//返回这个
}
};
gridView.setAdapter(adapter);//把adapter加到这个View里面,我试了加到Layout,加不进去。
/*
然后我们给图片,加到gridView哦,加上点击事件监听
*/
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent=getIntent();//得到传过来的intent
Bundle bundle=new Bundle();//新建一个bundle对象,然后实例化
bundle.putInt("newOne",path[i]);//给他里头传进去数据,引号里面的是你自己要起的名字,String类型的,这个跟intent传数据的那个类型有关系,感兴趣就去查一下。反正就是一个kay加数据,我们找这个kay值来找到我们需要的数据
intent.putExtras(bundle);//拿出来数据
setResult(0x11,intent);//给这个方法,这个方法跟名一样,给一个Result,到那个页面就收着了,这个0x11跟上一个一样可以改成别的。这个东西主要是用来配对的,
finish();//关闭
}
});
然后数据是不进去了,进intent里了,然后我们再第一个Activity里取出来就ok了,重写onActivityResult方法
MainActivitiy.java
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==0x11&&resultCode==0x11){
//这个就取出来,然后用就行了
Bundle bundle=data.getExtras();
int imageId=bundle.getInt("newOne");
ImageView imageView=findViewById(R.id.imageView);
imageView.setImageResource(imageId);
}
}
intent里头不能传int类型的,试了好几回。