移动技术开发第二次实验报告
本次实验报告要求如下
根据课程内容进行recycleview设计开发。在原有作业1上选择一个tab添加recycleview显示。显示内容不做限定,可以是新闻、商品、球队、明星、快递时间轴、漫画等。
本次代码:https://gitee.com/lv-hongyi/mobile-development-technology
实现
1.将之前创建的tab01.xml进行修改
将LinearLayout改为RelativeLayout,在布局文件中加入Recycleview,命名tab01
<?xml version="1.0" encoding="utf-8"?>
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/tab01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="never"
android:scrollbars="none" />
2.新建一个xml文件,命名tab01_recycleview.xml
一个LinearLayout下包含两个textview,一个表示组名一个表示成员
<?xml version="1.0" encoding="utf-8"?>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_margin="8dp"
android:background="@android:color/darker_gray"
android:orientation="vertical">
android:id="@+id/tv_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
tools:text="联系人" />
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
tools:text="消息" />
3.改写fragment文件
在原本的代码基础上进行增加,不需要进行新建文件,所以改写之前的fragment文件就可以。
先要放入数据,所以就对数据进行处理,既可以直接写代码,也可以写无返回值的函数,目的就是放入数据,后面可以进行传值。
package com.example.mywechat;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class messageFragmentextends Fragment {
private static final StringTAG = messageFragment.class.getSimpleName();
private ListmList =new ArrayList<>();
private Viewview;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view = inflater.inflate(R.layout.tab01, container,false);
initData();
initView();
return view;
}
private void initData() {
mList.add("消息1");
mList.add("消息2");
mList.add("消息3");
mList.add("消息4");
mList.add("消息5");
mList.add("消息6");
mList.add("消息7");
mList.add("消息8");
mList.add("消息9");
mList.add("消息10");
mList.add("消息11");
mList.add("消息12");
mList.add("消息13");
mList.add("消息14");
mList.add("消息15");
mList.add("消息16");
mList.add("消息17");
mList.add("消息18");
mList.add("消息19");
mList.add("消息20");
mList.add("消息21");
mList.add("消息22");
mList.add("消息23");
mList.add("消息24");
mList.add("消息25");
mList.add("消息26");
mList.add("消息27");
mList.add("消息28");
mList.add("消息29");
mList.add("消息30");
}
private void initView() {
messageAdapter adapter =new messageAdapter(getActivity());
RecyclerView rcvt1 =view.findViewById(R.id.tab01);
LinearLayoutManager managert1 =new LinearLayoutManager(getActivity());
managert1.setOrientation(LinearLayoutManager.VERTICAL);
// 也可以直接写成:
// rcvt1.setLayoutManager(new LinearLayoutManager(this));
rcvt1.setLayoutManager(managert1);
rcvt1.setHasFixedSize(true);
rcvt1.setAdapter(adapter);
adapter.sett1DataList(mList);
}
}
4.adapter类的完成
创建adapter类是为了方便fragment里的函数实现。
getItemCount函数,是返回item的长度,所以返回列表差长度即可。
package com.example.mywechat;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class messageAdapterextends RecyclerView.Adapter {
private static final StringTAG = messageAdapter.class.getSimpleName();
private ContextmContext;
private ListmList =new ArrayList<>();
public messageAdapter(Context context) {
mContext = context;
}
public void sett1DataList(List list) {
Log.d(TAG,"sett1DataList: " + list.size());
mList = list;
notifyDataSetChanged();
}
@NonNull
@Override
public t1ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.tab01_recycleview, parent,false);
return new t1ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull t1ViewHolder holder,int position) {
holder.t1Name.setText(position +1 +"");
holder.t1Content.setText(mList.get(position));
}
@Override
public int getItemCount() {
return mList ==null ?0 :mList.size();
}
public class t1ViewHolderextends RecyclerView.ViewHolder {
TextViewt1Name,t1Content;
public t1ViewHolder(View itemView) {
super(itemView);
t1Name = itemView.findViewById(R.id.tv_num);
t1Content = itemView.findViewById(R.id.tv_content);
}
}
}