正常创建RecyclerView布局,正常创建Adapter设配器类,正常对Activity中的RecyclerView添加适配器及布局管理器。。。
看下效果

怎么获取到列表的第一个Item并修改字体为红色?
刚开始我想到了getChildAt(),这个方法只能获取RecyclerView中第一页加载的可见Item的View,再向下就不行了,接下来看操作20-25行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private List<String> datas = new ArrayList<>();
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); setData(); setRecycler(); }
private void setRecycler() { MyRecyclerViewAdapter myRecyclerViewAdapter = new MyRecyclerViewAdapter(datas,this); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,RecyclerView.VERTICAL,false); recyclerView.setAdapter(myRecyclerViewAdapter); recyclerView.setLayoutManager(linearLayoutManager);
int position = 0;
LinearLayout linearLayout = (LinearLayout) recyclerView.getLayoutManager().findViewByPosition(position);
TextView textView = (TextView) linearLayout.getChildAt(0); textView.setTextColor(MainActivity.this.getResources().getColor(R.color.red));
}
private void setData() { for (int i = 0; i < 10; i++) { datas.add("数据" + i); } }
private void init() { recyclerView = findViewById(R.id.recyclerView); } }
|
RecyclerView加载完毕后,获取通过它的布局管理器获取它的第一个item,理论是可以的,但是运行会报错,找不到代码中linearLayout变量的对象

这是因为Activity的onCreate()方法中,只是对页面进行初始化,View还没有被绘制,所以RecyclerView的item无法获取;当onResume方法被调用时,View才会被绘制,软件进入运行状态(例如oncreate中View.getWidth和View.getHeight无法获得view的高度和宽度)
解决:OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,这是一个注册监听视图树的观察者(observer),在视图树的全局事件改变时得到通知。ViewTreeObserver不能直接实例化,而是通过getViewTreeObserver()获得。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private List<String> datas = new ArrayList<>();
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); setData(); setRecycler(); }
private void setRecycler() { MyRecyclerViewAdapter myRecyclerViewAdapter = new MyRecyclerViewAdapter(datas,this); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,RecyclerView.VERTICAL,false); recyclerView.setAdapter(myRecyclerViewAdapter); recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int position = 0;
LinearLayout linearLayout = (LinearLayout) recyclerView.getLayoutManager().findViewByPosition(position);
TextView textView = (TextView) linearLayout.getChildAt(0); textView.setTextColor(MainActivity.this.getResources().getColor(R.color.red)); } }); }
private void setData() { for (int i = 0; i < 10; i++) { datas.add("数据" + i); } }
private void init() { recyclerView = findViewById(R.id.recyclerView); } }
|
看下效果

Fragment布局中同样适用