首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的回收器视图中的片段适配器getitem count显示为零,并且不显示layout.but中的值。我将数据从api添加到模型类。

我的回收器视图中的片段适配器getitem count显示为零,并且不显示layout.but中的值。我将数据从api添加到模型类。
EN

Stack Overflow用户
提问于 2016-09-22 14:36:44
回答 4查看 1.7K关注 0票数 0

homepage这是我的fragment

代码语言:javascript
运行
复制
public class Premiums extends Fragment {
private RecyclerView recyclerPremium;
private RecyclerView.LayoutManager mLayoutManager;
private List<FeaturedAddDetails> featuredAddDetailsList = new ArrayList<>();
private List<PremiumDetails> premiumDetailslist = new ArrayList<>();
private NewestAdapter newestAdapter;
private PremiumAdapter premiumAdapter;
private String jsonResponse;
private PremiumDetails premiumDetails;
private JSONObject jsonobject;

public Premiums() {
}



@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View mainView = inflater.inflate(R.layout.premium_fragment, container, false);
    recyclerPremium = (RecyclerView) mainView.findViewById(R.id.recycler_premium);
    premiumAdd();
    premiumAdapter = new PremiumAdapter(getActivity().getApplicationContext(), premiumDetailslist);
    recyclerPremium.setAdapter(premiumAdapter);
    return mainView;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
    recyclerPremium.setLayoutManager(mLayoutManager);
    recyclerPremium.setHasFixedSize(true);
}

private void premiumAdd() {
    PremiumRequestHandler premiumHandler = new PremiumRequestHandler("premiumADD");
    premiumHandler.executeAsStringRequest(new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.e("response", response);

            JSONArray jsonarray = null;
            try {
                jsonarray = new JSONArray(response);

            } catch (JSONException e) {
                e.printStackTrace();
            }
            for (int i = 0; i < jsonarray.length(); i++) {
                try {
                    jsonobject = jsonarray.getJSONObject(i);
                    Log.e("id", String.valueOf(jsonobject.getInt("id")));
                    premiumDetails = new PremiumDetails(jsonobject.getInt("id"),
                            jsonobject.getInt("userid"),
                            jsonobject.getInt("mobile"),
                            jsonobject.getInt("cityid"),
                            jsonobject.getInt("price"),
                            jsonobject.getInt("comments"),
                            jsonobject.getInt("created"),
                            jsonobject.getInt("categoryid"),
                            jsonobject.getInt("MainCategoryID"),
                            jsonobject.getInt("views"),
                            jsonobject.getInt("ImageCount"),
                            jsonobject.getInt("storeid"),
                            jsonobject.getString("title"),
                            jsonobject.getString("default_photo"),
                            jsonobject.getString("CityName"),
                            jsonobject.getString("CategoryName"),
                            jsonobject.getString("currency"),
                            jsonobject.getString("description"));
                    premiumDetailslist.add(premiumDetails);
                    premiumAdapter.setPremiumDetails(premiumDetailslist);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }



        }
    }, new BaseRequest.ErrorResponseCallback() {
        @Override
        public void onError(Exception exception) {

        }
    });


}

这是我的adapter

代码语言:javascript
运行
复制
    public class PremiumAdapter extends RecyclerView.Adapter<PremiumAdapter.MyViewHolderPremium> {
private List<PremiumDetails> premiumDetailsList;
private ImageLoader imageLoader;
private Context context;

public PremiumAdapter(Context context, List<PremiumDetails> premiumDetailsList) {
    this.premiumDetailsList = premiumDetailsList;
    this.context = context;
    notifyDataSetChanged();

}
public void setPremiumDetails(List<PremiumDetails> premiumDetailsList) {
    this.premiumDetailsList = premiumDetailsList;
    notifyDataSetChanged();
}


public class MyViewHolderPremium extends RecyclerView.ViewHolder  {
    private TextView txtTitle,txtDescription,txtCityName,txtPrice,txtCategory,txtHour,txtPhotoNo;
    private NetworkImageView imgPhoto;
    public MyViewHolderPremium(View itemView) {
        super(itemView);
        txtTitle = (TextView)itemView.findViewById(R.id.txt_title_fad);
        txtDescription = (TextView)itemView.findViewById(R.id.description_fad);
        txtCityName = (TextView)itemView.findViewById(R.id.city_name_fad);
        txtPrice = (TextView)itemView.findViewById(R.id.price_fad);
        txtCategory = (TextView)itemView.findViewById(R.id.category_fad);
        txtHour = (TextView)itemView.findViewById(R.id.hours_fad);
        txtPhotoNo = (TextView)itemView.findViewById(R.id.txt_photo_no_fad);
        imgPhoto=(NetworkImageView)itemView.findViewById(R.id.img_photo_lod_fad);
    }
}

@Override
public MyViewHolderPremium onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.featured_ad_adapter_layout,parent,false);
    final MyViewHolderPremium myViewHolderPremium = new MyViewHolderPremium(itemView);
    return myViewHolderPremium;
}

@Override
public void onBindViewHolder(MyViewHolderPremium holder, int position) {
    PremiumDetails premiumDetails = premiumDetailsList.get(position);
    holder.txtTitle.setText(premiumDetails.getTitle());
    holder.txtDescription.setText(premiumDetails.getDescription());
    holder.txtCityName.setText(premiumDetails.getCityName());
    holder.txtPrice.setText(Integer.toString(premiumDetails.getPrice()));
    holder.txtCategory.setText(premiumDetails.getCategoryName());
    holder.txtHour.setText(Integer.toString(premiumDetails.getCreated()));
    holder.txtPhotoNo.setText(Integer.toString(premiumDetails.getImageCount())+" photos " );
    try {
        imageLoader= VolleyHandler.getImageLoader();
    } catch (Exception e) {
        e.printStackTrace();
    }
    //imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
    //imageLoader.get(featuredAddDetails.getDefault_photo(), ImageLoader.getImageListener(holder.imgPhoto, R.mipmap.ic_launcher, android.R.drawable.ic_dialog_alert));


    holder.imgPhoto.setImageUrl(premiumDetails.getDefault_photo(),imageLoader);
}
@Override
public int getItemCount() {
    Log.e("size", String.valueOf(premiumDetailsList.size()));
    return premiumDetailsList.size();
}}

我在显示值时出错,但我从json获得了值,并且我无法将其添加到adapter和模型类中,请帮助我,我看了一整天的堆栈溢出,但我找不到我的问题我的getItemCount()显示为0“

EN

回答 4

Stack Overflow用户

发布于 2016-09-22 14:43:37

在适配器的构造函数中设置数据后尝试notifyDataSetChanged()

编辑每当您的数据发生更改时,您还需要通知适配器,然后对其调用notifyDataSetChanged()

您可能正在将空数据设置到Adapter中,您的列表发生了更改,但Adapter并不知道这一点。

更新除了适配器构造函数之外,还应向适配器添加一个setData(List),以便在运行时更改dataset。

代码语言:javascript
运行
复制
 public void setPremiumDetails(List<PremiumDetails> premiumDetailsList) {
    this.premiumDetailsList = premiumDetailsList;
    notifyDataSetChanged();
}

当您在premiumAdd()中的请求返回时,您接收到一组新的数据,您使用新的数据在您的适配器上调用setPremiumDetails,列表将更新。

票数 0
EN

Stack Overflow用户

发布于 2016-09-22 14:46:06

您正在设置适配器,然后调用premiumAdd() method.First调用该方法,然后设置适配器。

代码语言:javascript
运行
复制
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View mainView = inflater.inflate(R.layout.premium_fragment, container, false);
    recyclerPremium = (RecyclerView) mainView.findViewById(R.id.recycler_premium);
    premiumAdd();
    premiumAdapter = new PremiumAdapter(getActivity().getApplicationContext(), premiumDetailslist);
    recyclerPremium.setAdapter(premiumAdapter);
    return mainView;
票数 0
EN

Stack Overflow用户

发布于 2016-09-22 14:51:37

您的notifiy适配器在每个添加

代码语言:javascript
运行
复制
for (...){
   ....
    premiumDetailslist.add(premiumDetails);
    premiumAdapter.notifyDataSetChanged();// called every time wrong
}

还要提供确切的错误日志记录

并将notifyDataSetChanged()移动到for not in循环之后

如果没有数据显示,尝试recyclerview.invalidate,但我不会特别这样做,我会尝试调试,记录每个步骤,检查预期序列中的方法不起作用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39631888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档