Android studio写一段用recyclerview实现列表索引的完整代码并逐句添加注释
时间: 2024-02-20 07:57:42 浏览: 32
好的,以下是使用RecyclerView实现列表索引的完整代码,每行代码都有注释说明:
```java
// 导入需要使用的类
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
// 声明RecyclerView
private RecyclerView recyclerView;
// 声明索引列表
private List<String> indexList;
// 声明数据列表
private List<String> dataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化索引列表和数据列表
initData();
// 初始化RecyclerView
initRecyclerView();
}
// 初始化索引列表和数据列表
private void initData() {
indexList = new ArrayList<>();
dataList = new ArrayList<>();
// 添加26个字母到索引列表
indexList.add("#");
for (char i = 'A'; i <= 'Z'; i++) {
indexList.add(String.valueOf(i));
}
// 添加100个随机字符串到数据列表
for (int i = 0; i < 100; i++) {
dataList.add(getRandomString(5));
}
}
// 初始化RecyclerView
private void initRecyclerView() {
// 获取RecyclerView控件
recyclerView = findViewById(R.id.recycler_view);
// 创建索引适配器
IndexAdapter indexAdapter = new IndexAdapter(indexList);
// 创建数据适配器
DataAdapter dataAdapter = new DataAdapter(dataList);
// 将索引适配器设置给RecyclerView
recyclerView.setAdapter(indexAdapter);
// 设置布局管理器
recyclerView.setLayoutManager(new LinearLayoutManager(this));
// 添加分割线
recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
// 添加滑动监听器,实现索引联动
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// 获取第一个可见的item的位置
int firstVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
// 根据位置获取对应的索引字母
String indexLetter = indexList.get(firstVisibleItemPosition);
// 更新索引控件上显示的字母
((TextView) findViewById(R.id.index_text)).setText(indexLetter);
// 将索引字母滚动到屏幕顶部
int indexPosition = indexAdapter.getIndexPosition(indexLetter);
((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(indexPosition, 0);
}
});
// 将数据适配器设置给RecyclerView
recyclerView.setAdapter(dataAdapter);
}
// 随机生成指定长度的字符串
private String getRandomString(int length) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < length; i++) {
builder.append((char) (Math.random() * 26 + 'A'));
}
return builder.toString();
}
// 索引适配器
private class IndexAdapter extends RecyclerView.Adapter<IndexAdapter.ViewHolder> {
// 索引列表
private List<String> indexList;
// 构造函数
public IndexAdapter(List<String> indexList) {
this.indexList = indexList;
}
// 创建ViewHolder
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_index, parent, false);
return new ViewHolder(view);
}
// 绑定ViewHolder
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.indexText.setText(indexList.get(position));
}
// 获取索引字母在数据列表中对应的位置
public int getIndexPosition(String indexLetter) {
return dataList.indexOf(indexLetter);
}
// 获取列表项数量
@Override
public int getItemCount() {
return indexList.size();
}
// ViewHolder类
public class ViewHolder extends RecyclerView.ViewHolder {
// 索引控件
private TextView indexText;
// 构造函数
public ViewHolder(View itemView) {
super(itemView);
indexText = itemView.findViewById(R.id.index_text);
}
}
}
// 数据适配器
private class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
// 数据列表
private List<String> dataList;
// 构造函数
public DataAdapter(List<String> dataList) {
this.dataList = dataList;
}
// 创建ViewHolder
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_data, parent, false);
return new ViewHolder(view);
}
// 绑定ViewHolder
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.dataText.setText(dataList.get(position));
}
// 获取列表项数量
@Override
public int getItemCount() {
return dataList.size();
}
// ViewHolder类
public class ViewHolder extends RecyclerView.ViewHolder {
// 数据控件
private TextView dataText;
// 构造函数
public ViewHolder(View itemView) {
super(itemView);
dataText = itemView.findViewById(R.id.data_text);
}
}
}
}
```
以上是使用RecyclerView实现列表索引的完整代码,这段代码可以实现一个带有索引的列表,滑动时会自动联动索引位置。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)