要使用自定义项在Android RecyclerView中显示进度条,并异步加载数据,可以按照以下步骤进行操作:
首先,创建一个RecyclerView的适配器类,并继承RecyclerView.Adapter。在适配器中,定义一个内部类ViewHolder,用于存储每个项的视图。
public class CustomAdapter extends RecyclerView.Adapter {
private List mDataList;
private Context mContext;
public CustomAdapter(Context context, List dataList) {
mContext = context;
mDataList = dataList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
DataItem item = mDataList.get(position);
holder.bindData(item);
}
@Override
public int getItemCount() {
return mDataList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView mTextView;
private ProgressBar mProgressBar;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mTextView = itemView.findViewById(R.id.text_view);
mProgressBar = itemView.findViewById(R.id.progress_bar);
}
public void bindData(DataItem item) {
mTextView.setText(item.getText());
// 显示进度条
mProgressBar.setVisibility(View.VISIBLE);
// 异步加载数据
loadData(item);
}
private void loadData(DataItem item) {
// 模拟异步加载数据
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// 更新数据
item.setText("Loaded Data");
mTextView.setText(item.getText());
// 隐藏进度条
mProgressBar.setVisibility(View.GONE);
}
}, 2000); // 模拟2秒的加载时间
}
}
}
接下来,创建一个自定义的数据项类DataItem,用于存储每个项的数据。
public class DataItem {
private String mText;
public DataItem(String text) {
mText = text;
}
public String getText() {
return mText;
}
public void setText(String text) {
mText = text;
}
}
然后,在RecyclerView的布局文件item_layout.xml中,定义项的布局,包括一个TextView和一个ProgressBar。
最后,在主Activity中使用RecyclerView,并给其设置适配器。
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
List dataList = new ArrayList<>();
dataList.add(new DataItem("Item 1"));
dataList.add(new DataItem("Item 2"));
dataList.add(new DataItem("Item 3"));
CustomAdapter adapter = new CustomAdapter(this, dataList);
mRecyclerView.setAdapter(adapter);
}
}
以上代码示例中,每个项在绑定数据时显示进度条,并模拟2秒的异步加载数据。加载完成后,隐藏进度条并更新数据项。