0

Я создаю приложение, похожее на приложение instagram, но только администратор может добавлять содержимое. Я использовал python django для моего бэкэнда, но когда я добавляю новый элемент в свою базу данных django, он наступает последним на recyclerview. Я хочу, чтобы это было так, что, когда я добавляю новый элемент, он наступает первым, когда вы открываете мое приложение, например, как сначала показывает последние элементы. Это мой пользовательский класс адаптерКак показать недавно добавленные элементы сначала в recyclerview

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); 
    } 
} 
} 

Это мой основной класс активности

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); 

    } 
} 
+0

Я думаю, что [setStackFromEnd] (https://developer.android.com/reference/android/support/v7/widget/LinearLayoutManager.html#setStackFromEnd (булево)) будет делать для вас – Rehan

+0

я использовал его, но он отображает список из buttom. это не то, как я этого хочу. Я хочу, чтобы он отображал представление сверху, но сначала показывал последнее. как какой-то обратный –

+0

Затем попробуйте [Collections.reverse] (https://developer.android.com/reference/java/util/Collections.html#reverse (java.util.List )), чтобы перенести последний элемент на первый место и первый элемент для последнего – Rehan

ответ

1

Хорошо, так это то, что работает для меня. После получения 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); 

      } 
0

Макс Миллиардер,

Если «USERLIST» содержит один элемент, а затем сделать так

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

Если у вас есть экземпляр адаптера, то просто обновите адаптер, как t его

adapter.notifyDataSetChanged(); 

вместо

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

userList - это ArrayList –

+0

, можете ли вы помочь с функцией «.add». Я новый программист :-) –

0

Чтобы отобразить последние добавленные данные в верхней части списка делают это

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

вы можете помочь с функцией «.add». Я новый программист :-) –

+0

Добавьте в свой ArrayList новые данные, которые вы выбираете –