之前我曾多次使用RecyclerView
,但这是第一次工作太慢。
在这种情况下,项目由简单的LinearLayout
表示,其中包含3个视图:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/linearLayout"
android:orientation="horizontal"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tvTicketNumber"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:gravity="center"
android:padding="8dp"/>
<EditText
android:id="@+id/etTotalSold"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:padding="8dp"
android:gravity="center" />
<TextView
android:id="@+id/tvSurplus"
android:layout_width="0dp"
android:layout_weight="1"
android:padding="8dp"
android:layout_height="match_parent"
android:gravity="center"/>
</LinearLayout>
RecyclerView
使用其适配器中的先前布局:
public class TicketAdapter extends RecyclerView.Adapter<TicketAdapter.ViewHolder> {
private ArrayList<Ticket> dataSet;
// Define references to the views for each data item
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView tvTicketNumber, tvSurplus;
public EditText etQuantity;
public ViewHolder(View v) {
super(v);
tvTicketNumber = (TextView) v.findViewById(R.id.tvTicketNumber);
etQuantity = (EditText) v.findViewById(R.id.etQuantity);
tvSurplus = (TextView) v.findViewById(R.id.tvSurplus);
}
}
public TicketAdapter() {
dataSet = new ArrayList<>();
}
public void setDataSet(ArrayList<Ticket> dataSet) {
this.dataSet = dataSet;
}
private String twoDigits(final int i) {
final String pre = (i<=9 ? "0" : "");
return pre + i;
}
@Override
public TicketAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.table_row, parent, false);
// set the view's size, margins, padding and layout parameters
return new ViewHolder(v);
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// get element from the data set
Ticket ticket = dataSet.get(position);
// replace the contents of the view with that element
holder.tvTicketNumber.setText(twoDigits(position));
holder.tvSurplus.setText("6");
}
@Override
public int getItemCount() {
return dataSet.size();
}
}
之前,我正在使用TableLayout
以编程方式创建TableRows,但我已经读过,布局必须用于XML中已定义的行数。
我必须在片段中加载100个项目的列表。但加载大约需要4秒钟。出于这个原因,我写了一些逻辑来显示progressBar,然后隐藏它并显示scrollView(回收器在其中)。
fragmentTransaction仍然很慢,所以我将代码移到onViewCreated
方法。
事务仍然很慢,我添加了一个AsyncTask。通过最后一次更改,事务更快,但progressBar看起来一直停止,并且无法使用按钮(onPostExecute需要4秒才能加载并显示recyclelerView)。
我想显示progressBar的动画,但是onPostExecute
在UI线程中执行,所有应用程序在RecyclerView加载时停止了4秒。
请给我一些想法。在我使用从互联网上加载图像的项目之前,RecyclerView工作得更快。太奇怪了。