简体   繁体   English

如何在Android Studio中使用翻新和RecylerView呈现渲染JSON数据

[英]How to render render JSON data using retrofit and recylerview in android studio

I am trying use retrofit and recyclerview to display from a web app. 我正在尝试使用改造和recyclerview从Web应用程序显示。 I have the following models: 我有以下型号:

Main Activities 主要活动

public class ProfileActivity extends AppCompatActivity {
    private SalesAdapter mAdapter;
    private RecyclerView mRecyclerView;
    private SaleService mService;

    @Override
    protected void onCreate (Bundle savedInstanceState)  {
        super.onCreate( savedInstanceState );
        setContentView(R.layout.activity_profile );
        mService = ApiUtils.getSaleService();
        mRecyclerView = (RecyclerView) findViewById(R.id.rvItems);
        mAdapter = new SalesAdapter(this, new ArrayList<Sale>(0), new SalesAdapter.ItemListener() {
            @Override
            public void onPostClick(long id) {

            }
        });


        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(layoutManager);
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.setHasFixedSize(true);
        RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
        mRecyclerView.addItemDecoration(itemDecoration);

        loadAnswers();
    }

    public void loadAnswers() {
        mService.getSales().enqueue(new Callback<List<Sale>>() {
            @Override
            public void onResponse(Call<List<Sale>> call, Response<List<Sale>> response) {

                if(response.isSuccessful()) {
                    mAdapter.UpdateSales(response.body());
                } else {
                    int statuscode = response.code();
                }
            }

            @Override
            public void onFailure(Call<List<Sale>> call, Throwable t) {

            }
        });
    }
}

Recyclerview Adapter Recyclerview适配器

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

    private Context mContext;
    private List<Sale> mSales;
    private  ItemListener mItemListener;

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        public TextView tvLocaleName;
        ItemListener mItemListener;

        public ViewHolder(View itemView, ItemListener itemListener) {
            super(itemView);

            tvLocaleName = (TextView) itemView.findViewById(android.R.id.text1);
            this.mItemListener = itemListener;
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            Sale sale = getSales(getAdapterPosition());
            this.mItemListener.onPostClick(sale.getId());
            notifyDataSetChanged();
        }
    }

    public SalesAdapter(Context mContext, List<Sale> mSales, ItemListener mItemListener) {
        this.mContext = mContext;
        this.mSales = mSales;
        this.mItemListener = mItemListener;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        Context context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);

        View view = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
        return new ViewHolder(view, this.mItemListener);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Sale sale = mSales.get(position);
        TextView textView = holder.tvLocaleName;
        textView.setText(sale.getLocaleName());
    }

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



    public void UpdateSales(List<Sale> sales) {
        mSales = sales;
    }

    private Sale getSales(int position) {
        return mSales.get(position);
    }

    public interface ItemListener {
        void onPostClick(long id);
    }
}

在此处输入图片说明

from the image you can see that i am able to get back the data, but how do I display in it the recyclerview? 从图像中您可以看到我能够取回数据,但是如何在其中显示recyclerview? where am i going wrong with code? 代码哪里出问题了?

Add a notifyDataSetChanged() call to your adapter after you refresh the list. 刷新列表后,将notifyDataSetChanged()调用添加到适配器。


Your method should look like: 您的方法应如下所示:

public void UpdateSales(List<Sale> sales) {
    mSales = sales;
    notifyDataSetChanged();
}

Check out this link to learn more about this method. 查看此链接以了解有关此方法的更多信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM