RecyclerView 使用自定义的RecyclerView.Adapter之后无法显示
androidx.recyclerview.widget.RecyclerView
代码; 代码都是复制别人的;别人的就能跑为什么自己的就是没有办法执行呢?是不是很纳闷;…下面代码是复制的代码;别人就能跑;我的就不能…
private RecyclerView recycleView;
private RecyclerViewAdapter recyclerViewAdapter;
private List<String> locationCodeList;
private List<String> positionList;
private List<String> numberList;
public void init(){
recycleView = findViewById(R.id.recycle_view);
recyclerViewAdapter = new RecyclerViewAdapter();
recycleView.setAdapter(recyclerViewAdapter);
// 注意此处 传入的参数值 this
recycleView.setLayoutManager(new LinearLayoutManager(this));
// 注意此处 传入的参数值 this
recycleView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
}
class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
@Override
public RecyclerViewAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// 当不显示的时候注意此 LayoutInflater.from(getContext()) 这个参数的传值是否正确的上下文
RecyclerViewAdapter.MyViewHolder holder = new RecyclerViewAdapter.MyViewHolder(LayoutInflater.from(getContext()).inflate(R.layout.activity, parent, false));
return holder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.code.setText(locationCodeList.get(position));
holder.position.setText(positionList.get(position));
holder.number.setText(numberList.get(position));
}
@Override
public int getItemCount() {
return locationCodeList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView code;
TextView position;
TextView number;
private MyViewHolder(View view) {
super(view);
code = view.findViewById(R.id.code);
position = view.findViewById(R.id.position);
number = view.findViewById(R.id.number);
}
}
}
结果图 :

修改后代码;可以执行
private RecyclerView recycleView;
private RecyclerViewAdapter recyclerViewAdapter;
private List<String> locationCodeList;
private List<String> positionList;
private List<String> numberList;
public void init(){
recycleView = findViewById(R.id.recycle_view);
recyclerViewAdapter = new RecyclerViewAdapter();
recycleView.setAdapter(recyclerViewAdapter);
// 注意此处 传入的参数值 this
recycleView.setLayoutManager(new LinearLayoutManager(this));
// 注意此处 传入的参数值 this
recycleView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
}
class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
@Override
public RecyclerViewAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// =====================注意此处的参数传值 getLayoutInflater()
RecyclerViewAdapter.MyViewHolder holder = new RecyclerViewAdapter.MyViewHolder(getLayoutInflater().inflate(R.layout.activity, parent, false));
return holder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.code.setText(locationCodeList.get(position));
holder.position.setText(positionList.get(position));
holder.number.setText(numberList.get(position));
}
@Override
public int getItemCount() {
return locationCodeList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView code;
TextView position;
TextView number;
private MyViewHolder(View view) {
super(view);
code = view.findViewById(R.id.code);
position = view.findViewById(R.id.position);
number = view.findViewById(R.id.number);
}
}
}
结果图

主要是传入上下文的时候;传入的对象错误; 所以需要检查入参的上下文对象
// 注意此处 传入的参数值 this
recycleView.setLayoutManager(new LinearLayoutManager(this));
// 注意此处 传入的参数值 this
recycleView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
// =====================注意此处的参数传值 getLayoutInflater()
RecyclerViewAdapter.MyViewHolder holder = new RecyclerViewAdapter.MyViewHolder(getLayoutInflater().inflate(R.layout.activity, parent, false));
TextView 设置高度不起效
期望 :
如下图所示; xml中写了规定的 layout_height; 希望通过代码 改变当前的固定高度
<TextView
android:id="@+id/position"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:gravity="center"
android:text="" />
实现
//传入需要修改的 TextView 对象
private void setLayoutParams(@NonNull TextView textView) {
ViewGroup.LayoutParams layoutParams = textView.getLayoutParams();
//获取 固定的高度; 设置你想添加的高度; 也可以根据字体大小自适应 android.view.ViewGroup.LayoutParams#MATCH_PARENT
layoutParams.height = layoutParams.height + 60;
textView.setLayoutParams(layoutParams);
}
注 :
/**
* Sets the height of the TextView to be exactly <code>pixels</code> tall.
* <p>
* //没有设置固定高度的情况下有作用
* This value is used for height calculation if LayoutParams does not force TextView to have an
* exact height. Setting this value overrides previous minimum/maximum height configurations
* such as {@link #setMinHeight(int)} or {@link #setMaxHeight(int)}.
*
* @param pixels the exact height of the TextView in terms of pixels
*
* @see #setLines(int)
*
* @attr ref android.R.styleable#TextView_height
*/
//设置此高度无效;因为我们已经在xml中设置了固定的 高度
textView.setHeight(25);
TextView 设置长按复制
//设置可以被选中
android:textIsSelectable="true"

长按或者双加效果

本文记录了在Android开发中遇到的三个问题:1.使用自定义RecyclerView.Adapter时无法显示内容,原因是传入的上下文对象错误;2.TextView设置高度无效,可能是XML布局与代码设置冲突;3.TextView设置长按复制功能的实现。

9868

被折叠的 条评论
为什么被折叠?



