gpt4 book ai didi

android - RecyclerView 适配器 onCreateViewHolder 与 onBindViewHolder 未调用 : view empty

转载 作者:行者123 更新时间:2023-11-29 19:38:27 25 4
gpt4 key购买 nike

我在 Android 的 Android 版本 23 项目中使用 RecyclerViewCardViewFragmentAsyncTask工作室。我正在尝试调试三星 Galaxy S7 上的应用程序。无论我似乎在代码方面尝试什么,我的 RecyclerView.Adapter 实现类的 onCreateViewHolderonBindViewHolder 方法都不会被调用。

Activity :

public class RecyclerViewFragmentActivity extends FragmentActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.todays_visit_list_container);
if (savedInstanceState == null) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
RecyclerViewFragment fragment = new RecyclerViewFragment();
transaction.replace(R.id.sample_content_fragment, fragment);
transaction.commit();
}

}
}

fragment :

public class RecyclerViewFragment extends Fragment {
protected RecyclerView mRecyclerView;
protected RecyclerView.LayoutManager mLayoutManager;
protected RecyclerViewAdapter mAdapter;
protected ListRefresher aListRefresher;

protected class ListRefresher extends AsyncTask<Uri, Void, Void> {
private ArrayList<Probationer> probationers = null;
RecyclerViewFragment fragment = null;

public ListRefresher(RecyclerViewFragment fragment) {
this.fragment = fragment;
}

@Override
protected Void doInBackground(Uri... params) {
ArrayList<Probationer> probationers = new ArrayList<Probationer>();
// getData makes a JSON call to retrieve data for RecyclerView Adapter
listobjects = getData();
return null;
}

@Override
protected void onPostExecute(Void unused) {
fragment.onTaskCompleted();
}

public ArrayList getItems() {
return probationers;
}

}

protected void onTaskCompleted() {
PPOTodaysVisitListAdapter adapter = new PPOTodaysVisitListAdapter(getActivity(), aListRefresher.getItems());
mRecyclerView.setAdapter(adapter);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.todays_visit_list, container, false);
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
llm.setOrientation(LinearLayoutManager.VERTICAL);
llm.scrollToPosition(0);
mRecyclerView.setLayoutManager(llm);
mRecyclerView.setHasFixedSize(true);
aListRefresher = new ListRefresher(this);
aListRefresher.execute();
return rootView;
}
}

适配器:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private ArrayList<Probationer> probationers;
Context context;

public RecyclerViewAdapter(Context context, ArrayList<Probationer> probationers) {
this.probationers = probationers;
this.context = context;
}

public static class MyViewHolder extends RecyclerView.ViewHolder {
public CardView cv;
public TextView supervisionLevel;
public TextView popCodes;
public TextView unavailable;
public TextView offenderId;
public TextView name;
public TextView birthDate;
public TextView addressLine1;
public TextView addressLine2;
public TextView lastDrugScreen;
public TextView lastDrugScreenResultNeg;
public TextView lastDrugScreenResultPos;
public TextView mainCrime;
public TextView lastDate1Lbl;
public TextView lastDate2Lbl;
public TextView lastDate3Lbl;
public TextView lastDate4Lbl;
public TextView lastDate1;
public TextView nextDate1;
public TextView lastDate2;
public TextView nextDate2;
public TextView lastDate3;
public TextView nextDate3;
public TextView lastDate4;
public TextView nextDate4;

MyViewHolder(View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.cardView);
supervisionLevel = (TextView) itemView.findViewById(R.id.supervisionLevel);
unavailable = (TextView) itemView.findViewById(R.id.unavailable);
popCodes = (TextView) itemView.findViewById(R.id.popCodes);
.
.
.
}
}

@Override
public RecyclerViewAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//Inflate the layout, initialize the View Holder
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.todays_visit_list_item, parent, false);
RecyclerViewAdapter.MyViewHolder holder = new RecyclerViewAdapter.MyViewHolder(v);
return holder;

}

@Override
public void onBindViewHolder(RecyclerViewAdapter.MyViewHolder viewHolder, final int position) {
if (probationers != null && probationers.size() > 0) {
Probationer aProbationer = probationers.get(position);
if (aProbationer != null) {
viewHolder.offenderId.setText(aProbationer.getProbationerId());
viewHolder.name.setText(aProbationer.getName());
viewHolder.birthDate.setText(aProbationer.getDateOfBirth());
viewHolder.supervisionLevel.setText(aProbationer.getSupervisionLevel());
viewHolder.unavailable.setText(aProbationer.getUnavailable());
.
.
.
}
}

@Override
public int getItemCount() {
return probationers.size();
}
}

RecyclerView 布局(todays_visit_list.xml):

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>

CardView 布局(todays_visit_list_item.xml):

<android.support.v7.widget.CardView
android:id="@+id/cardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
app:cardCornerRadius="@dimen/activity_vertical_margin"
app:cardElevation="@dimen/activity_vertical_margin"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/photolayout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="72dip"
android:layout_height="100dip"
android:layout_marginTop="6dip">
<ImageView
android:id="@+id/loadingphoto"
android:scaleType="fitEnd"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/nopicture"/>
<ImageView
android:id="@+id/photo"
android:scaleType="fitEnd"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/supmsglayout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="72dip"
android:layout_height="20dip"
android:layout_marginTop="6dip"
android:layout_below="@id/photolayout"
android:layout_alignLeft="@id/photolayout">
<TextView android:id="@+id/supervisionLevel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dip"
android:layout_marginLeft="2dip"
android:textSize="11sp"
android:textStyle="bold"/>
<TextView android:id="@+id/unavailable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="11sp"
android:textStyle="bold"
android:layout_toRightOf="@id/supervisionLevel"
android:layout_alignTop="@id/supervisionLevel"/>
<TextView android:id="@+id/popCodes"
android:layout_width="76dip"
android:layout_height="wrap_content"
android:layout_marginTop="2dip"
android:textSize="11sp"
android:textColor="#E79A00"
android:textStyle="bold"
android:layout_below="@id/supervisionLevel"
android:layout_alignLeft="@id/supervisionLevel"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/contentlayout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dip"
android:layout_height="100dip"
android:layout_marginTop="8dip"
android:layout_marginLeft="4dip"
android:layout_toRightOf="@id/photolayout"
android:layout_alignTop="@id/photolayout">
<TextView android:id="@+id/offenderIdLbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Offender ID: "
android:textStyle="bold"
android:textSize="11sp"/>
<TextView android:id="@+id/offenderId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_toRightOf="@id/offenderIdLbl"
android:layout_alignTop="@id/offenderIdLbl"/>
<TextView android:id="@+id/nameLbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Name: "
android:textStyle="bold"
android:textSize="11sp"
android:layout_below="@id/offenderIdLbl"
android:layout_alignLeft="@id/offenderIdLbl"/>
<TextView android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_toRightOf="@id/nameLbl"
android:layout_alignTop="@id/nameLbl"/>
<TextView android:id="@+id/birthDateLbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Birth Date: "
android:textStyle="bold"
android:textSize="11sp"
android:layout_below="@id/nameLbl"
android:layout_alignLeft="@id/nameLbl"/>
<TextView android:id="@+id/birthDate"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_toRightOf="@id/birthDateLbl"
android:layout_alignTop="@id/birthDateLbl"/>
<TextView android:id="@+id/addrLbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Address: "
android:textStyle="bold"
android:textSize="11sp"
android:layout_below="@id/birthDateLbl"
android:layout_alignLeft="@id/birthDateLbl"/>
<TextView
android:id="@+id/addressLine1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_toRightOf="@id/addrLbl"
android:layout_alignTop="@id/addrLbl"/>
<TextView
android:id="@+id/addressLine2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_below="@id/addressLine1"
android:layout_alignLeft="@id/addressLine1"/>
<TextView android:id="@+id/lastDrugScreenLbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Drug Scr: "
android:textStyle="bold"
android:textSize="11sp"
android:layout_below="@id/addressLine2"
android:layout_alignLeft="@id/addrLbl"/>
<TextView android:id="@+id/lastDrugScreen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_toRightOf="@id/lastDrugScreenLbl"
android:layout_alignTop="@id/lastDrugScreenLbl"/>
<TextView android:id="@+id/lastDrugScreenResultNeg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_toRightOf="@id/lastDrugScreen"
android:layout_alignTop="@id/lastDrugScreen"/>
<TextView android:id="@+id/lastDrugScreenResultPos"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="11sp"
android:textColor="#d7144b"
android:textStyle="bold"
android:layout_toRightOf="@id/lastDrugScreen"
android:layout_alignTop="@id/lastDrugScreen"/>
<TextView android:id="@+id/mainCrimeLbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Crime: "
android:textStyle="bold"
android:textSize="11sp"
android:layout_below="@id/lastDrugScreenLbl"
android:layout_alignLeft="@id/lastDrugScreenLbl"/>
<TextView android:id="@+id/mainCrime"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_toRightOf="@id/mainCrimeLbl"
android:layout_alignTop="@id/mainCrimeLbl"/>
<TextView android:id="@+id/lastDate1Lbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="33dip"
android:textStyle="bold"
android:textSize="11sp"
android:layout_below="@id/mainCrimeLbl"
android:layout_alignLeft="@id/mainCrimeLbl"/>
<TextView android:id="@+id/lastDate2Lbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="34dip"
android:textStyle="bold"
android:textSize="11sp"
android:layout_below="@id/mainCrimeLbl"
android:layout_toRightOf="@id/lastDate1Lbl"/>
<TextView android:id="@+id/lastDate3Lbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="86dip"
android:textStyle="bold"
android:textSize="11sp"
android:layout_below="@id/mainCrimeLbl"
android:layout_toRightOf="@id/lastDate1Lbl"/>
<TextView android:id="@+id/lastDate4Lbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="140dip"
android:textStyle="bold"
android:textSize="11sp"
android:layout_below="@id/mainCrimeLbl"
android:layout_toRightOf="@id/lastDate1Lbl"/>
<TextView android:id="@+id/lastLbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Last: "
android:textStyle="bold"
android:textSize="11sp"
android:layout_below="@id/lastDate1Lbl"
android:layout_alignLeft="@id/mainCrimeLbl"/>
<TextView android:id="@+id/nextLbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Next: "
android:textStyle="bold"
android:textSize="11sp"
android:layout_below="@id/lastLbl"
android:layout_alignLeft="@id/lastLbl"/>
<TextView android:id="@+id/lastDate1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_below="@id/lastDate1Lbl"
android:layout_alignLeft="@id/lastDate1Lbl"/>
<TextView android:id="@+id/nextDate1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_below="@id/lastDate1"
android:layout_alignLeft="@id/lastDate1"/>
<TextView android:id="@+id/lastDate2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_below="@id/lastDate2Lbl"
android:layout_alignLeft="@id/lastDate2Lbl"/>
<TextView android:id="@+id/nextDate2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_below="@id/lastDate2"
android:layout_alignLeft="@id/lastDate2"/>
<TextView android:id="@+id/lastDate3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_below="@id/lastDate3Lbl"
android:layout_alignLeft="@id/lastDate3Lbl"/>
<TextView android:id="@+id/nextDate3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_below="@id/lastDate3"
android:layout_alignLeft="@id/lastDate3"/>
<TextView android:id="@+id/lastDate4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_below="@id/lastDate4Lbl"
android:layout_alignLeft="@id/lastDate4Lbl"/>
<TextView android:id="@+id/nextDate4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="11sp"
android:layout_below="@id/lastDate4"
android:layout_alignLeft="@id/lastDate4"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/undolayout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="40dip"
android:layout_height="100dip"
android:layout_marginTop="8dip"
android:layout_marginLeft="4dip"
android:layout_toRightOf="@id/contentlayout"
android:layout_alignTop="@id/contentlayout">
<Button
android:id="@+id/undo_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_undo"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:layout_gravity="end|center_vertical"
style="@style/Base.Widget.AppCompat.Button.Borderless"
/>
</RelativeLayout>
</LinearLayout>
</android.support.v7.widget.CardView>

我的 JSON 调用正在返回数据,AsyncTask 正在回调到 Fragment 并执行方法 onTaskCompleted()。当我创建 RecyclerViewAdapter 的实例时,ArrayList 包含项目。唯一的问题是 RecyclerView 从不显示任何内容。 RecyclerViewAdapteronCreateViewHolderonBindViewHolder 方法永远不会被调用。

我试过这两种布局的所有元素的 layout_widthlayout_height,我认为这是导致问题的原因。我还特意在 RecyclerViewAdapter 实例化之后和在 RecyclerView 中设置它之前调用了 notifyDataSetChanged()。那里也没有快乐。

有没有人在这里看到任何可能导致 RecyclerView 不呈现的明显问题?

我也很好奇究竟是什么触发了适配器上这两个方法的调用...如果我能弄清楚,也许我可以确定为什么没有触发事件。

最佳答案

尝试在生命周期的早期将适配器设置为 RecyclerView(onCreate 是一个不错的选择),并且当您的 AsyncTask 完成时仅通过 notifyDataSetChanged()

通知适配器

此外,请确保设置 LayoutManager,如下所示:

recycler.setLayoutManager(new LinearLayoutManager(this));

由于您的 RecyclerView 存在于 fragment 中,因此在您的情况下将是:

recycler.setLayoutManager(new LinearLayoutManager(getActivity()));

关于你的问题

I'm also curious as to what actually triggers the calling of these two methods on the adapter... if I can figure that out, maybe I can determine why the event isn't being triggered.

当渲染列表的时间到来时,它主要与您的数据集大小有关。在您的情况下(在我的情况下),缺少设置 LayoutManager 会以某种方式导致不呈现。

您已经在适配器中引用了上下文,您可以尝试这样做吗:

@Override
public RecyclerViewAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.todays_visit_list_item, parent, false); //
RecyclerViewAdapter.MyViewHolder holder = new RecyclerViewAdapter.MyViewHolder(v);
return holder;
}

关于android - RecyclerView 适配器 onCreateViewHolder 与 onBindViewHolder 未调用 : view empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38983373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com