繁体   English   中英

如何在recyclerview中首先显示最近添加的项目

[英]How to show recently added items first in recyclerview

我正在创建一个类似于 instagram 应用程序的应用程序,但只有管理员可以添加内容。 我将 python django 用于我的后端,但是当我将新项目添加到我的 django 数据库时,它在 recyclerview 上排在最后。 我希望它的方式是,当我添加新项目时,它会在您打开我的应用程序时首先出现,就像 instagram 首先显示最近的项目一样。 这是我的自定义适配器 class

public class DealAdapter extends RecyclerView.Adapter<DealAdapter.DealHolder> {

Context context;
ArrayList<Deal> arrayList;


public DealAdapter(Context context,  ArrayList<Deal> arrayList) {
    this.context = context;
    this.arrayList = arrayList;
}

@Override
public DealHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View v = inflater.inflate(R.layout.deal_cardview, parent, false);
    DealHolder dealHolder = new DealHolder(v);
    return dealHolder;
}

@Override
public void onBindViewHolder(DealHolder holder, int position) {
    Deal deal = arrayList.get(position);
    holder.title.setText(deal.getTitle());
    Picasso.with(context).
            load(deal.getImage()).
            placeholder(R.drawable.loading).
            error(android.R.drawable.stat_notify_error).
            into(holder.image);

}

@Override
public int getItemCount() {
    if(arrayList != null) {
        return arrayList.size();
    }else {
        return 0;
    }
}


public class DealHolder extends RecyclerView.ViewHolder {
   TextView title;
   ImageView image;

   public DealHolder(View itemView) {
       super(itemView);
       title = (TextView) itemView.findViewById(R.id.tvTitle);
       image = (ImageView) itemView.findViewById(R.id.ivImage);
   }
 }
}

这是我的主要活动 class

public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
String TAG = "MainActivity";
ImageButton ibMore;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    recyclerView = (RecyclerView) findViewById(R.id.rvRecyclerview);
    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    String url = "http://192.168.43.2/api/deals/?format=json";
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    ArrayList<Deal> userList = new JsonConverter<Deal>().
                            toArrayList(response, Deal.class);
                    DealAdapter adapter = new DealAdapter(getApplicationContext(), userList);
                    recyclerView.setAdapter(adapter);

                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d(TAG, error.toString());
                    Toast.makeText(getApplicationContext(), "Something Went wrong: " + "'" + error + "'", Toast.LENGTH_LONG).show();

                }
            });

    MySingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequest);

  }
}

好的,这对我有用。 获取JSON并转换为ArrayList之后,我在“ Collections.reverse(arrayList);”中调用了它。 如下所示,将其添加到适配器中。

new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                ArrayList<Deal> userList = new JsonConverter<Deal>().
                        toArrayList(response, Deal.class);

                Collections.reverse(userList);

                DealAdapter adapter = new DealAdapter(getApplicationContext(), userList);
                recyclerView.setAdapter(adapter);

            }

马克斯·亿万富翁

如果您的“ userList”包含单个项目,则应这样做

adapter.add(0, userList.get(0));
adapter.notifyItemInserted(0);

如果您有适配器实例,则只需像这样刷新适配器

adapter.notifyDataSetChanged();

代替

DealAdapter adapter = new DealAdapter(getApplicationContext(), userList);
recyclerView.setAdapter(adapter);

要将最近添加的数据显示在列表顶部,请执行以下操作

   yourArrayListOfData.add(0, newAddedData);
   adapter.notifyDataSetChanged();

相信我,只有这一条线对我有用。 用这个:

Collections.reverse(list);

其中list将是您的列表,其中包含任何类型的 object

暂无
暂无

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

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