добавить разделы в переработке - PullRequest
0 голосов
/ 29 октября 2019

Я сделал обзор переработчика, и теперь я хотел добавить заголовок в просмотр переработчика (я имею в виду 1 заголовок сверху обзора переработчика, другие, возможно, в середине обзора переработчика)

это мой подсказка надежды на активацию, данная в arraylist, прояснитмой вопрос больше:

public class MainActivity extends AppCompatActivity {

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

        RecyclerView …
            ...(layoutManager);

        ArrayList<Rv> rvList = new ArrayList<>();

// I want to add here "header 1"
        rvList.add(new Rv(R.mipmap.ic_launcher_round, "Robert Doenry Jr.", "IronMan"));
        rvList.add(new Rv(R.mipmap.ic_launcher_round, "Tom Holland", "Spider Man"));
        rvList.add(new Rv(R.mipmap.ic_launcher_round, "Chris Evans", "Captain America"));
//I want to add here header 2
        rvList.add(new Rv(R.mipmap.ic_launcher_round, "Mark Ruffalo", "Hulk"));
        rvList.add(new Rv(R.mipmap.ic_launcher_round, "Chris Hemsworth","Thor"));
//I want to add here header 3
        rvList.add(new Rv(R.mipmap.ic_launcher_round, "Tom Hiddleston", "Loki"));
        rvList.add(new Rv(R.mipmap.ic_launcher_round, "Zoe Saldana", "Gamora"));

        RvAdapter adapter = new RvAdapter(rvList);
        recyclerView.setAdapter(adapter);
    }
}

и это мой адаптер для этого переработчикаПросмотреть:

public class RvAdapter extends RecyclerView.Adapter<RvAdapter.RvHolderView> {

    public ArrayList<Rv> rvList;

    public RvAdapter(ArrayList<Rv> rvList) {
        this.rvList = rvList;
    }

    @NonNull
    @Override
    public RvHolderView onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
      View view =  LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.rv_view, viewGroup, false);
        return new RvHolderView(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RvHolderView rvHolderView, int i) {
        Rv current = rvList.get(i);
        rvHolderView.imageView.setImageResource(current.getImage());
        rvHolderView.text1.setText(current.getText1());
        rvHolderView.text2.setText(current.getText2());
    }

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

    public static class RvHolderView extends RecyclerView.ViewHolder {
        public ImageView imageView;
        public TextView text1;
        public TextView text2;
        public RvHolderView(@NonNull View itemView) {
            super(itemView);
             imageView = itemView.findViewById(R.id.img);
             text1 = itemView.findViewById(R.id.texta);
            text2 = itemView.findViewById(R.id.textb);
         }
    }
}

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Что вам нужно, так это многопоточный вид переработчика:

Предположим, заголовок списка - это просто ImageView, а остальные элементы списка - просто текст, подобный приведенному ниже:

  • Заголовок (ImageView)
  • Item (TextView)
  • Item (TextView)
  • Item (TextView)

Это следующие шаги, которые необходимо выполнить:

  1. Определить интерфейс для добавления viewType к вашим элементам

    interface RecyclerData {
        val viewType: Int
    }
    
  2. Для каждого viewType определите класс данных:

    enum class ItemsViewType{
        HEADER,
        ITEM
    }
    
    data class PrimaryItem(val headerImageUri:String) : RecyclerData {
         override val viewType = ItemsViewType.HEADER.ordinal
    }
    
    data class SecondaryItem(val itemContent:String) : RecyclerData {
         override val viewType = ItemsViewType.ITEM.ordinal
    }
    
  3. Создайте свой адаптер RecyclerView:

    class MyBeautifulAdapter<T : RecyclerData> : RecyclerView.Adapter<RecyclerViewHolder<T>>(){
    
    var items: ArrayList<T> = arrayListOf()
    set(value) {
        field = value
        notifyDataSetChanged()
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder<T> {
        return when(viewType){
            ItemsViewType.HEADER.ordinal -> HeaderViewHolder(LayoutInfaltor.from(parent.context).inflate(R.layout.row_header,parent,false)),
            ItemsViewType.ITEM.ordinal -> ItemViewHolder(LayoutInflator.from(parent.context).inflate(R.layout.row_secondary,parent,false))
        }
    }  
    override fun getItemViewType(position: Int): Int {
        return items[position].viewType
    }
    
    override fun onBindViewHolder(holder: RecyclerViewHolder<T>, position: Int) {
        holder.bind(items[position])
    }
    
  4. ViewHolders:

    open class RecyclerViewHolder<T : RecyclerData>(val itemView: View) : RecyclerView.ViewHolder(itemView){
         open fun bindData(item:T){
         }
    }
    class HeaderViewHolder(private val view:View) : RecyclerViewHolder<PrimaryItem>(view){
        override fun bindData(item: PrimaryItem) {
            // load header image he
        }
    }
    class ItemViewHolder(private val view:View) : RecyclerViewHolder<SecondaryItem>(view){
        override fun bindData(item: SecondaryItem) {
            // set textView content here
        }
    }
    
0 голосов
/ 29 октября 2019

Вы можете сделать это разными типами. Вы можете добавить type поле в вашем Rv примере:

rvList.add(new Rv(R.mipmap.ic_launcher_round, "Robert Doenry Jr.", "IronMan", "header"));
rvList.add(new Rv(R.mipmap.ic_launcher_round, "Robert Doenry Jr.", "IronMan","item"));
rvList.add(new Rv(R.mipmap.ic_launcher_round, "Tom Holland", "Spider Man","item"));

И в представлении переработчика вы можете переопределить getItemViewType

Пример:

 override fun getItemViewType(position: Int): Int {
        return if(itemList(position).type.equals("header")) 0 else 1
    }

А в onCreateViewHolder или в onBindViewHolder другим типом создайте разные ViewHolders

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return when (type) {
               type1 -> //do your staff
               type2 -> //do your staff
               else -> //do your Staff
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...