Каков практический способ написать переработчик - PullRequest
0 голосов
/ 03 мая 2019

Я видел много способов написать Recyclerview. Но я не знаю, что является лучшим практическим способом с точки зрения производительности.

У меня есть два способа написать Recyclerview, они одинаковые или есть разница?

Первый способ - записать его в отдельный класс адаптера

Adapter.java

public class Adapter  extends RecyclerView.Adapter<Adapter.MyViewHolder> {

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    return null;
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {

}

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

class MyViewHolder extends RecyclerView.ViewHolder{
    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
    }
}
}

Второй способ - написать это в MainActivity или Fragment

 recyclerView.setAdapter(new RecyclerView.Adapter() {
         @NonNull
         @Override
         public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
             return null;
         }

         @Override
         public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
         }

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

}
public class MyViewHolder extends RecyclerView.ViewHolder{
    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
    }
}

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Адаптер должен быть реализован в виде отдельного класса, поскольку он упрощает его повторное использование:

 public class YourAdapter extends RecyclerView.Adapter<Adapter.MyViewHolder> {

 private ArrayList<YourModel> list = new ArrayList();

public YourAdapter(ArrayList<YourModel> list){
 this.list = list;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    //return the viewholder
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
 //deal with data
}

@Override
public int getItemCount() {
    //return the list number
}

class MyViewHolder extends RecyclerView.ViewHolder{
    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
      //bind the views
    }
}
}

Чем в вашей деятельности / фрагменте вы можете использовать его следующим образом:

//after you have initialized recyclerview and added the layoutmanager
//prepare the list for the adapter
recyclerView.setAdapter(new YourAdapter(yourList));

Таким образом, вы можете использовать его более чем в одном действии / фрагменте.Этот шаблон кода многократного использования должен быть предпочтительным, потому что вам не нужно создавать классы несколько раз как анонимные классы - при необходимости.

0 голосов
/ 03 мая 2019

лучший способ - установить класс адаптера вне основного класса, поскольку в вашем объяснении просто используйте свой первый класс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...