【问题标题】:How to implement List item in TabLayout With ViewPager2如何使用 ViewPager2 在 TabLayout 中实现列表项
【发布时间】:2021-07-17 11:03:05
【问题描述】:

我是 Android 开发新手,目前正在使用 Viewpager2 学习 TabLayout。 我已经在我的适配器中硬编码了片段。顺便说一句,我需要将我所有的片段添加到列表中。那么如何在列表或 Arrylist 中添加片段。请帮助我。

这是适配器代码:

public class ScreenSliderAdapter extends FragmentStateAdapter{

public ScreenSliderAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
    super(fragmentManager, lifecycle);
}

@NonNull
@Override
public Fragment createFragment(int position) {

    if (position==0) {

        return new BangladeshFragment();

    } else if (position==1) {

        return new BrazilFragment();

    } else if (position==2) {

        return new MaltaFragment();

    }

    return new BangladeshFragment();
}

@Override
public int getItemCount() {

    return 3;
}

}

这是主要活动代码:

公共类 MainActivity 扩展 AppCompatActivity {

FragmentManager fm;
ScreenSliderAdapter sa;

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


    fm = getSupportFragmentManager();
    sa = new ScreenSliderAdapter(fm,getLifecycle());

    ViewPager2 pager = findViewById(R.id.pager);

    TabLayout tabLayout = findViewById(R.id.tabLayoutID);
    tabLayout.addTab(tabLayout.newTab().setText("Bangladesh"));
    tabLayout.addTab(tabLayout.newTab().setText("Brazil"));
    tabLayout.addTab(tabLayout.newTab().setText("Malta"));

    pager.setAdapter(sa);


    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {

            pager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });


    pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageSelected(int position) {

            tabLayout.selectTab(tabLayout.getTabAt(position));
        }
    });
}

}

【问题讨论】:

    标签: android android-tablayout android-viewpager2


    【解决方案1】:

    活动

    import android.os.Bundle;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.viewpager2.widget.ViewPager2;
    
    import java.util.ArrayList;
    
    public class MyActivity extends AppCompatActivity {
    
        ViewPager2 myViewPager2;
        MyAdapter MyAdapter;
        private ArrayList<String> arrayList = new ArrayList<>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_my);
    
            myViewPager2 = findViewById(R.id.view_pager);
    
            arrayList.add("Item 1");
            arrayList.add("Item 2");
            arrayList.add("Item 3");
            arrayList.add("Item 4");
            arrayList.add("Item 5");
    
            MyAdapter = new MyAdapter(this, arrayList);
    
    
            myViewPager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL);
    
            myViewPager2.setAdapter(MyAdapter);
        }
    }
    

    新功能

    myViewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }
    
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
    
                Log.e("Selected_Page", String.valueOf(position));
            }
    
            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
            }
        });
    

    我的适配器

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    import androidx.annotation.NonNull;
    import androidx.recyclerview.widget.RecyclerView;
    
    import java.util.ArrayList;
    
    public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    
        private Context context;
        private ArrayList<String> arrayList = new ArrayList<>();
    
        public MyAdapter(Context context, ArrayList<String> arrayList) {
            this.context = context;
            this.arrayList = arrayList;
        }
    
        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
            return new MyViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
            holder.tvName.setText(arrayList.get(position));
        }
    
        @Override
        public int getItemCount() {
            return arrayList.size();
        }
    
        public class MyViewHolder extends RecyclerView.ViewHolder {
            TextView tvName;
    
            public MyViewHolder(@NonNull View itemView) {
                super(itemView);
                tvName = itemView.findViewById(R.id.tvName);
            }
        }
    }
    

    【讨论】:

    • 嘿,我用 java 创建了这个项目,顺便说一句,你的解决方案是基于 Cotlin 的。你能帮我写java代码吗?
    • 它不工作。你能告诉我适配器代码吗?
    猜你喜欢
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2021-01-12
    • 2020-11-23
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多