一、设计目标
- 根据之前App页面设计的基础,在列表页上实现点击跳转到另一详情页面。
- 上一篇博客:Android Studio-App门户页面设计与开发-CSDN博客
二、功能说明
在聊天页面中,点击某一消息列时,会跳转到其详情页。聊天列表包含联系人的头像与姓名,消息详情页包含联系人的头像、姓名以及聊天信息。
三、效果展示
四、技术说明
-
Intent
-
Intent是一个将要执行的动作的抽象的描述,一般作为参数来使用,由 Intent来协助完成 Android各个组件之间的通讯。例如调用startActivity()来启动一个Activity,使用构造方法:Intent intent = new Intent(this, SecondActivity.class);startActivity(intent);
五、设计流程
-
聊天列表 item.xml
-
消息详情页
-
activity_talk.xml
具体代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/girl1" />
<TextView
android:id="@+id/name"
android:layout_width="279dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="TextView"
android:textColor="@color/blue"
android:textSize="35dp" />
</LinearLayout>
<TextView
android:id="@+id/info"
android:layout_width="match_parent"
android:layout_height="523dp"
android:gravity="center"
android:text="TextView"
android:textSize="50dp" />
</LinearLayout>
-
Activity_talk.java
- 设置点击跳转后显示的详情页面,通过Intent获取到的数据设置item控件的值。
public class Activity_talk extends AppCompatActivity {
TextView textView1,textView2;
ImageView imageView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_talk);
textView1 = findViewById(R.id.name);
textView2 = findViewById(R.id.info);
imageView1 = findViewById(R.id.imageView);
//获取Fragment1传过来的intent
Intent intent=getIntent();
//根据intent获取得到的数据设置item控件的值
imageView1.setImageResource(intent.getIntExtra("image",R.drawable.girl1));
textView1.setText(intent.getStringExtra("friend"));
textView2.setText(intent.getStringExtra("message"));
}
}
-
聊天页面 Fragment1.java
- 在聊天页面Fragment1设置聊天列表RecycleView的具体内容,包括联系人姓名、聊天消息、联系人头像。
public class Fragment1 extends Fragment {
RecyclerView recyclerView;
Myadapter myadapter;
View view1;
Context context;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view1=new View(getContext());
view1= inflater.inflate(R.layout.fragment1, container, false);
recyclerView= view1.findViewById(R.id.recyclerview);
//聊天页面展示
//friends:联系人 info:消息 images:联系人头像
String[] friends = {"叶苏","白榆","胡杨","林竹","江叙","陈冀","楚安","许然","邱望","白景"};
String[] info = { "你好。","再见。","谢谢。","早上好。","今天天气真好。",
"你吃饭了吗?","明天见。","是真的吗?","原来如此。","你说得对。",};
int[] images={R.drawable.girl1,R.drawable.girl2,R.drawable.man1,R.drawable.girl3,R.drawable.man2,
R.drawable.man3,R.drawable.man4,R.drawable.girl4,R.drawable.girl5,R.drawable.man5};
//将friend、info、images聚合为一个集合
List<Map<String,Object>> talk2=new ArrayList<Map<String,Object>>();
for(int i=0;i<friends.length;i++) {
Map<String,Object> it=new HashMap<String,Object>();
it.put("friend",friends[i]);
it.put("message",info[i]);
it.put("image",images[i]);
talk2.add(it);
}
context=getContext();
myadapter=new Myadapter(talk2,context);
recyclerView.setAdapter(myadapter);
LinearLayoutManager manager=new LinearLayoutManager(view1.getContext());
manager.setOrientation(RecyclerView.VERTICAL);
recyclerView.setLayoutManager(manager);
return view1;
}
}
-
Myadapter.java
- 在onBindViewHolder中增加消息页详情,并通过Intent实现页面跳转。
public void onBindViewHolder(@NonNull Myholder holder, int position) {
//holder.textView1.setText(talk1.get(position).get("friend").toString());
String name=talk1.get(position).get("friend").toString();
String info=talk1.get(position).get("message").toString();
int image=Integer.parseInt(talk1.get(position).get("image").toString());
//获取聊天页面中某个消息详情
holder.textView1.setText(name);
holder.imageView1.setImageResource(image);
//添加点击事件
holder.textView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//点击后跳转到消息详情页
Intent intent=new Intent(context1,Activity_talk.class);
//向intent传值
intent.putExtra("friend",name);
intent.putExtra("message",info);
intent.putExtra("image",image);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//跳转
context1.startActivity(intent);
}
});
}