目录
一.作业要求
二.分析与实现
一.分析
二.实现
源码:GitHub - ldaadl/AndroidDevelopment1: 第一次作业
一.作业要求
作业2: 1、请在实验二的基础上,对有recycleView的页面进行点击跳转设计。比如,某一tab页是新闻列表,则点击某一行能跳转到新闻详情页面; 2、本次作业考查的基础原理是对activity的生命周期的理解以及状态转变操作; 3、作业以博客形式提交; 4、提交截止日期:10月25日24:00。
二.分析与实现
一.分析
我之前做的是一个类微信界面而不是新闻列表界面,在我看来,点击一行聊天记录然后跳转到具体聊天界面完全可以用fragment实现,但是作业明确要求了考察activity,所以我还是选择在点击一行聊天记录时跳转到新的activity界面。
新的activity的xml文件由三部分组成,顶栏、底栏和中间部分,中间部分我打算使用recyclerView。
二.实现
1.xml文件的具体实现
这一次作业相较于上一次实验,新增了这些文件:
message_botton和message_top是底栏和顶栏,activity_main2中包含这两个文件还有一个recyclerView,而message_item1和item2则是填充进recyclerView中的内容,他们两个的区别是,item1是对方的消息,item2是自己的消息,两者布局不同,所以要区分开。
2.java文件的具体实现
实现跳转:
我们来一步一步看怎么将功能实现,首先我们需要的是点击一个item后实现跳转到一个新的activity,并显示相应的聊天记录。这里实现跳转并不难,难的是如何区分点击了不同的item以方便传入activity不同数据。
好在上一次实验时,我做过左划删除的功能,左划删除也必须鉴别左划了哪个item,所以我们这里的操作可以借鉴上一次的操作,我上一次是重写了控件recyclerView,以增加左划删除的功能,这一次同样可以增加点击跳转的功能:
在重写的类SwipeRecyclerView.java中
private onClickListener mClickListener;
public void setonClickListener(onClickListener listener){
this.mClickListener = listener;
}
public interface OnClickListener{
void onClick(int position, String id);
}
// 在 onTouchEvent 中新增
// 对某个item的选中完成在onTouchEvent中
// 对点击item的监听
mCurItemLayout.setonClickListener(new View.onClickListener() {
@Override
public void onClick(View view) {
if (mClickListener != null){
mClickListener.onClick(curSelectPosition, "");
}
}
});
我们还需要在FragmentMessage.java 中增加:
// 设置点击监听
// 这里有疑问,重写的onClick的上下文是当前环境的吗?
recyclerView.setonClickListener(new SwipeRecyclerView.onClickListener() {
@Override
public void onClick(int position, String id) {
Intent intent = new Intent(context,MainActivity2.class); // ****
intent.putExtra(key[0],data.get(position).get(key[0]).toString());
intent.putExtra(key[1],data.get(position).get(key[1]).toString());
intent.putExtra(key[2],Integer.parseInt(data.get(position).get(key[2]).toString()));
Toast.makeText(context,"跳转页面",Toast.LENGTH_LONG).show();
// SystemClock.sleep(1000);
startActivityForResult(intent, 0);
}
});
这里重写了onClick方法,供SwipeRecyclerView.java使用,以实现具体的onClick功能。
在跳转的activity中显示消息:
跳转完成后,我们需要在跳转后的activity的recyclerView中填充我们的消息,这里的难点在于,消息是有两种的的,对方的消息和我们的消息布局是不同的,也就是说我们需要在一个recyclerView中填充两种item,我后来查找过资料,这可以在Adapter通过viewType实现,但是我选择了自己的方法:
我在实验后发现,Adapter的生命周期是:构造器->getItemCount->onCreateViewHolder->MyViewHolder.MyViewHolder->onBindViewHolder
除了构造器是一次调用外,其余部分每在recyclerView上实现一个item就会循环一次。选择item.xml文件渲染的步骤在onCreateViewHolder和MyViewHolder.MyViewHolder中,所以我定义了一个int whichItem来决定某一次渲染item时该渲染哪个item.xml,这个whichItem在构造器中初始化来判断第一个item使用那个item.xml,之后在onBindViewHolder中判断下一次渲染item该使用哪一个item。
AdapterOfMessage.java
public class AdapterOfMessage extends RecyclerView.Adapter {
private View itemView;
private Context context;
private List