RecyclerView页面的点击跳转
要求:在已有RecylerView的基础上实现跳转,目的是掌握activity的生命周期。
主要步骤:
①RecycleView界面的设计布局
由于我们在聊天界面显示,因此在聊天界面拖入RecylerView控件,然后根据自己的喜好设计item的xml文件,我采用的是垂直布局,显示效果如下:
这个是item的xml文件的具体样式:
②编写Adapter适配器的相关代码
适配器是建立前端activity显示与数据之间的桥梁,数据通过适配器传给activity。
根据个人需要编写相应的适配器代码:
package com.example.myapplication;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
import java.util.Map;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.myviewholder> {
private List<Map<String,Object>> data;
private Context context;
private View inflater;
public MyAdapter(Context context,List<Map<String,Object>> data){
this.data= data;
this.context=context;
}
@Override
public myviewholder onCreateViewHolder( ViewGroup viewGroup, int viewType) {
inflater = LayoutInflater.from(context).inflate(R.layout.item,viewGroup,false);
myviewholder myviewholder=new myviewholder(inflater);
return myviewholder;
}
@Override
public void onBindViewHolder(myviewholder holder, @SuppressLint("RecyclerView") int position ){
holder.name.setText(data.get(position).get("片名").toString());
holder.content.setText(data.get(position).get("介绍").toString());
holder.character.setImageResource((int)(data.get(position).get("封面")));
holder.changeView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(context,MainActivity2.class);
intent.putExtra("封面",(int)data.get(position).get("封面"));
intent.putExtra("片名",data.get(position).get("片名").toString());
intent.putExtra("详细介绍",data.get(position).get("详细介绍").toString());
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return data.size();
}
class myviewholder extends RecyclerView.ViewHolder{
TextView name;
TextView content;
ImageView character;
LinearLayout changeView;
public myviewholder( View itemView) {
super(itemView);
character = itemView.findViewById(R.id.item_image);
name=itemView.findViewById(R.id.item_textview1);
content=itemView.findViewById(R.id.item_textview2);
changeView=itemView.findViewById(R.id.total_view);
}
}
}
③那数据从哪里来,我们把数据放在显示的activity对应的Java文件中,也就是fragment_chat,通过Java文件去配置数据,可以不用在xml文件里去一个一个编辑
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_chat, container, false);
context = view.getContext();
recyclerView = view.findViewById(R.id.recyclerview);
data = new ArrayList<Map<String, Object>>();
String[] title = {"迪迦奥特曼", "虹猫蓝兔七侠传", "火力少年王", "米奇妙妙屋", "神厨小福贵", "网球王子", "围棋少年", "喜羊羊", "中华小子"};
String[] introduce = {"经典奥特曼特摄片", "经典国漫", "悠悠球火爆一时", "智力启蒙动画", "童年的回忆", "优雅永不过时", "骑术的高超博弈", "超经典国漫", "外资合拍优秀动画"};
String[] I_detail = {"迪迦·奥特曼,日本圆谷特摄剧《迪迦·奥特曼》及其衍生作品中的主角,也是首位拥有形态转化能力的奥特曼。\n" +
"不同于其他奥特曼的是,迪迦·奥特曼是在地球的超古代时期就已经出现的巨人,但并非是地球出生的奥特曼。他原本是黑暗巨人,也是其中的领袖,后在超古代时期的地球警备队队长幽怜的劝说下弃暗投明,吸收了三个同伴的力量再封印了他们,最终成为光之巨人迪迦·奥特曼。" +.........
"};
int[] image = {R.drawable.dijiaaoteman, R.drawable.hongmaolantuqixiazhuan, R.drawable.huolishaonianwang, R.drawable.miqimiaomiaowu, R.drawable.shenchuxiaofugui, R.drawable.wangqiuwangzi, R.drawable.weiqishaonian, R.drawable.xiyangyang, R.drawable.zhonghuaxiaozi};
for (int i = 0; i < title.length; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("片名", title[i]);
map.put("介绍", introduce[i]);
map.put("封面", image[i]);
map.put("详细介绍", I_detail[i]);
data.add(map);
}
LinearLayoutManager manager = new LinearLayoutManager(context);
manager.setOrientation(LinearLayoutManager.VERTICAL);
MyAdapter = new MyAdapter(context, data);
recyclerView.setAdapter(MyAdapter);
recyclerView.setLayoutManager(manager);
recyclerView.addItemDecoration(new DividerItemDecoration(context, LinearLayoutManager.VERTICAL));//添加下划线
return view;
}
④下一步就是设计跳转之后的页面,也就是设计一个新的activity,在新的activity的xml文件选择想要的布局效果
我们只需要创建了一个activity,当我们点击某个item时,我们可以通过intent传递以及接受数据和参数。在该activity的java文件里接受传来的intent,并利用intent来设置该activity。点击跳转到详细介绍的核心就是使用startActivity()来启动活动,这个函数我们写在适配器Myadapter,因为RecyclerView的数据配置是在Myadapter里面,因此点击跳转的事件也应在Myadapter里。还需要在MainActivity2里面使用finish()来结束掉当前活动来返回主界面的活动,MainActivity1和MainActivity2之间同样需要进行信息传递,所以使用函数putExtra()用来向activity传递一些页面设置参数,使用getStringExtra()来接受intent里传来的内容。
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity2 extends AppCompatActivity{
private ImageView imageView;
private TextView textView1,textView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Intent intent = getIntent();
String first = intent.getStringExtra("片名");
String second = intent.getStringExtra("详细介绍");
imageView = findViewById(R.id.inner_image);
textView1 = findViewById(R.id.inner_title);
textView2 = findViewById(R.id.inner_introduction);
textView1.setText(first);
textView2.setText(second);
imageView.setImageResource(intent.getIntExtra("封面", 1));
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity2.this, first, Toast.LENGTH_SHORT).show();
}
});
}
}
效果展示:
点击之后的界面,以第一个item的点击为例
代码地址