实验目标和实验内容:
1、掌握UI设计中的layout布局(约束布局)与基本控件(button、text、imageview等); 2、掌握复杂控件与adapter的使用
实验结果:(实验小结与结果截图) 3、功能说明与核心代码 我将利用RecyclerView实现在一个fragment上列出多个国内乐队名字。 BandFragment.java文件 import android.content.Context; 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 BandFragment extends Fragment { private List mList = new ArrayList<>(); private Context context; private RecyclerView recyclerView; private com.example.mywechat.Adapter Adapter;
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
public BandFragment() {
// Required empty public constructor
}
// TODO: Rename and change types and number of parameters
public static BandFragment newInstance(String param1, String param2) {
BandFragment fragment = new BandFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.tab03, container, false);
context = view.getContext();
recyclerView = view.findViewById(R.id.tab03_RecyclerView);
initData();
LinearLayoutManager manager = new LinearLayoutManager(context);
manager.setOrientation(LinearLayoutManager.VERTICAL);
Adapter = new Adapter(mList,context);
recyclerView.setAdapter(Adapter);
recyclerView.setLayoutManager(manager);
return view;
}
private void initData() {
mList.add("新裤子");
mList.add("岛屿心情");
mList.add("万能青年旅店");
mList.add("甜约翰");
mList.add("痛仰乐队");
mList.add("椅子乐队");
mList.add("隔壁团乐队");
mList.add("理想后花园");
mList.add("霓虹花园");
mList.add("贰伍吸烟所");
mList.add("草东没有派对");
mList.add("回春丹");
mList.add("告五人");
mList.add("逃跑计划");
mList.add("虎啸春");
mList.add("落日飞车");
}
} Tab03.xml文件里的声明 <androidx.recyclerview.widget.RecyclerView android:id="@+id/tab03_RecyclerView" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> Adapter.java源码 public class Adapter extends RecyclerView.Adapter<Adapter.VerticalViewHolder> { private Context mContext; private List mList; public Adapter(List list, Context context) { mList = list; mContext = context; } @NonNull @Override public Adapter.VerticalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(this.mContext).inflate(R.layout.item02, parent, false); return new VerticalViewHolder(view); }
@Override
public void onBindViewHolder(@NonNull VerticalViewHolder holder, int position) {
holder.tvNum.setText(position + 1 + "");
holder.tvContent.setText(mList.get(position));
}
@Override
public int getItemCount() {
return mList == null ? 0 : mList.size();
}
public static class VerticalViewHolder extends RecyclerView.ViewHolder {
TextView tvNum, tvContent;
public VerticalViewHolder(View itemView) {
super(itemView);
tvNum = itemView.findViewById(R.id.item02_num);
tvContent = itemView.findViewById(R.id.item02_content);
}
}
}
4、结果截图
在tab01上实验的效果
View view= inflater.inflate(R.layout.tab01, container, false);
RecyclerView recyclerView = view.findViewById(R.id.tab01_Recycleview);
List list = new ArrayList<>();
Context context = this.getActivity();
for (int i=1;i<=20;i++){
list.add("这是第"+i+"个框");
}
5、实验小结
用Recyclerview在一个有限的窗口中显示大量的数据集,RecyclerView可以把它理解成一块空间,定义一个RecyclerView,就可以得到这块空间,为此我们将新建一个list为其输入数据,并且还需新建一个Adapter.java文件调用Adapter将list里的数据传入到这块空间里。