Невозможно надуть переработчик ViewView в ViewPager - PullRequest
0 голосов
/ 24 мая 2018

У меня возникли проблемы с раздуванием представления переработчика внутри viewPager.Приведенный ниже код относится к моей функции MainActivity:

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

    viewPager = findViewById(R.id.pager);
    tabLayout = findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);//setting tab over viewpager

    viewPager.setAdapter(new VeiwPagerAdapter());
}

. Ниже приведен мой ViewPagerAdapter:

public class VeiwPagerAdapter extends PagerAdapter {
private RecyclerView recyclerView;
private List<Pojo> pojoList = new ArrayList<>();

@Override
public int getCount() {
    return 2;
}

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
    return false;
}

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    if (position == 0) {
        LayoutInflater inflater = LayoutInflater.from(container.getContext());
        View view = inflater.inflate(R.layout.recycler_view_holder, container, false);
        recyclerView = view.findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(container.getContext()));
        pojoList.add(new Pojo("Random field 1", "Random field 1"));
        recyclerView.setAdapter(new RecycAdapter(pojoList));
        container.addView(view);
        return view;
    } else {
        LayoutInflater inflater = LayoutInflater.from(container.getContext());
        View view = inflater.inflate(R.layout.recycler_view_holder, container, false);
        recyclerView = view.findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(container.getContext()));
        pojoList.add(new Pojo("Random field 1", "Random field 1"));
        recyclerView.setAdapter(new RecycAdapter(pojoList));
        container.addView(view);
        return view;
    }
}

@Nullable
@Override
public CharSequence getPageTitle(int position) {
    return position == 0 ? "TAB 1" : "TAB 2";
}

Код RecycAdapter:

public class RecycAdapter extends RecyclerView.Adapter<RecycViewHolder> {
    private List<Pojo> pojoArrayList;

    public RecycAdapter(List<Pojo> pojoArrayList) {
        this.pojoArrayList = pojoArrayList;
    }

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

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

        View v = inflater.inflate(R.layout.item_layout, parent, false);

        return new RecycViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull RecycViewHolder holder, int position) {
        Pojo pojo = pojoArrayList.get(position);
        holder.textView1.setText(pojo.getText1());
        holder.textView2.setText(pojo.getText2());
    }

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

Также добавлен код ViewHolderНе уверен, что с реализацией viewHolder что-то не так.

public class RecycViewHolder extends RecyclerView.ViewHolder {

    public TextView textView1, textView2;

    public RecycViewHolder(View itemView) {
        super(itemView);
        this.textView1 = itemView.findViewById(R.id.textvie1);
        this.textView2 = itemView.findViewById(R.id.textvie2);
    }
}

В выводе нет ничего под каждой вкладкой.Может кто-нибудь, пожалуйста, помогите мне, где я ошибся

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Почему у вас есть блок кода на MainActivity?

recyclerView = view.findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    pojoList.add(new Pojo("Random field 1", "Random field 1"));
    recyclerView.setAdapter(new RecycAdapter(pojoList));
}

Я вижу некоторые конфликты с тем же R.id.recyclerView.

Если вы хотите, чтобы ViewPagerотображать два разных RecyclerViews на каждой вкладке, тогда у вашего MainActivity должны быть только контейнеры для ваших представлений.Не могли бы вы дать больше контекста о том, что вам нужно достичь?

Вы пытались показать простой и различный TextView / Layout на каждой вкладке?У вас могут быть проблемы с XML.

0 голосов
/ 26 мая 2018

Наконец, нашел решение, переопределенный метод isViewFromObject ранее возвращал false, что вызывало проблему при переходе на код, как показано ниже: все работало нормально.

@Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }
0 голосов
/ 24 мая 2018

Вам нужно накачать RecyclerView на каждую страницу ViewPager, другими словами поместить этот код в метод "instantiateItem":

recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
pojoList.add(new Pojo("Random field 1", "Random field 1"));
recyclerView.setAdapter(new RecycAdapter(pojoList));
...