gpt4 book ai didi

java - 如何使用 fragment 检索解析对象到recyclerview

转载 作者:行者123 更新时间:2023-12-01 10:46:00 26 4
gpt4 key购买 nike

我尝试在recyclerview上检索解析对象。但数据未显示。在logcat中

12-08 22:14:41.222 23950-23950/com.keboo.ime E/RecyclerView: No adapter attached; skipping layout
12-08 22:14:41.313 23950-23950/com.keboo.ime E/RecyclerView: No adapter attached; skipping layout


public class TerasFragment extends Fragment {

public TerasAdapter terasAdapter;
private RecyclerView recyclerView;

public TerasFragment() {
// Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

ParseQuery<ParseObject> query = ParseQuery.getQuery("teras");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> list, ParseException e) {
if (e != null) {
Toast.makeText(getActivity().getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
} else {
terasAdapter = new TerasAdapter(getActivity().getApplicationContext(), list);
}
}
});
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_teras, container, false);

LinearLayoutManager llm = new LinearLayoutManager(getActivity().getBaseContext());
llm.setOrientation(LinearLayoutManager.VERTICAL);

recyclerView = (RecyclerView) view.findViewById(R.id.recycle_status);
recyclerView.setLayoutManager(llm);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(terasAdapter);
return view;
}
}


public class TerasAdapter extends RecyclerView.Adapter<TerasAdapter.ViewHolder>{

List<ParseObject> mlist;
Context mContext;
LayoutInflater inflater;

public TerasAdapter(Context context, List<ParseObject> list){
this.mlist = list;
this.mContext = context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = inflater.from(parent.getContext()).inflate(R.layout.teras_item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
ParseObject status = mlist.get(position);
holder.name.setText(status.getString("nama"));
holder.status.setText(status.getString("status"));
ParseFile picture = (ParseFile) status.get("picture");
picture.getDataInBackground(new GetDataCallback() {
@Override
public void done(byte[] bytes, ParseException e) {
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
holder.profil.setImageBitmap(bitmap);
}
});
}

@Override
public int getItemCount() {
return 0;
}

public static class ViewHolder extends RecyclerView.ViewHolder{

CardView mCardView;
CircleImageView profil;
TextView name, type, time, status;

public ViewHolder(View itemView) {
super(itemView);
mCardView = (CardView) itemView.findViewById(R.id.cv_status);
profil = (CircleImageView) itemView.findViewById(R.id.de_status_profil);
name = (TextView) itemView.findViewById(R.id.tv_status_nama);
type = (TextView) itemView.findViewById(R.id.tv_status_type);
time = (TextView) itemView.findViewById(R.id.tvstatus_time);
status = (TextView) itemView.findViewById(R.id.tv_status_deskription);
}
}
}

最佳答案

看起来你是在 UI 线程以外的线程中进行解析,因此它与 UI 线程异步工作,因此你必须在处理解析后设置适配器,或者必须通知适配器。您收到消息正在跳过布局,因为 Recyclerview 中没有要显示的数据。所以你要做的是

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

ParseQuery<ParseObject> query = ParseQuery.getQuery("teras");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> list, ParseException e) {
if (e != null) {
Toast.makeText(getActivity().getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
} else {
setListView(list);
}
}
});
}



public void setListView(List<ParseObject< list){
terasAdapter = new TerasAdapter(getActivity().getApplicationContext(), list);
recyclerView = (RecyclerView) view.findViewById(R.id.recycle_status);
recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(terasAdapter);
}

并且适配器的 getItemCount() 方法中存在错误,您必须返回列表的大小,而不是返回 0。

例如:

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

关于java - 如何使用 fragment 检索解析对象到recyclerview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34170784/

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