Search code examples
androidandroid-viewpagerandroid-viewpager2

Viewpager2 get data from selected item on Activity


I want to display selected item description from viewpager2 on activity with toast.

How can I get data from viewpager?

I can display item position but I want to display selected item description with toast.

Sorry for my bad English.

Thank you for your help.

My code look like this;

public class MainActivity extends AppCompatActivity {
    private ViewPager2 viewPager2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager2 = findViewById(R.id.viewPager2);
        PagerAdapter pagerAdapter = new PagerAdapter(fetchDummyData());
        viewPager2.setAdapter(pagerAdapter);
        viewPager2.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);

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

                Toast.makeText(MainActivity.this, "selected item description should be here", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);

            }
        });
    }

    private List<PagerM> fetchDummyData() {
        List<PagerM> pagerMList = new ArrayList<>();
        String[] dummyArr = getResources().getStringArray(R.array.array_str_values);
        for (String str : dummyArr) {
            PagerM pagerM = new PagerM();
            pagerM.setPagerDescription(str);
            pagerMList.add(pagerM);
        }
        return pagerMList;
    }
}

array_str_values:

<string-array name="array_str_values">
    <item>car</item>
    <item>red</item>
    <item>new</item>
</string-array>

my adapter:

public class PagerAdapter extends RecyclerView.Adapter {
    private List<PagerM> pagerMList;

    class PagerViewHolder extends RecyclerView.ViewHolder {
        private TextView txtDescription;

        public PagerViewHolder(@NonNull View itemView) {
            super(itemView);
            txtDescription = itemView.findViewById(R.id.txtDescription);
        }
    }

    public PagerAdapter(List<PagerM> pagerMList) {
        this.pagerMList = pagerMList;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_pager, parent, false);
        return new PagerViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        PagerViewHolder viewHolder = (PagerViewHolder) holder;
        PagerM pagerM = pagerMList.get(position);
        viewHolder.txtDescription.setText(pagerM.getPagerDescription());
    }

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

PagerM:

public class PagerM {
    private String pagerDescription;

    public String getPagerDescription() {
        return pagerDescription;
    }

    public void setPagerDescription(String pagerDescription) {
        this.pagerDescription = pagerDescription;
    }
}

Solution

  • Make List pagerMList a field of you activity.

    private List<PagerM> pagerMList = new ArrayList<>();
    

    And then get data by position in you onPageSelected method.

    public class MainActivity extends AppCompatActivity {
    private ViewPager2 viewPager2;
    private List<PagerM> pagerMList = new ArrayList<>();
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        fetchDummyData();
        viewPager2 = findViewById(R.id.viewPager2);
        PagerAdapter pagerAdapter = new PagerAdapter(pagerMList);
        viewPager2.setAdapter(pagerAdapter);
        viewPager2.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
    
        viewPager2.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);
    
                Toast.makeText(MainActivity.this, pagerMList.get(position).getPagerDescription(), Toast.LENGTH_SHORT).show();
            }
    
            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
    
            }
        });
    }
    
    private List<PagerM> fetchDummyData() {
        String[] dummyArr = getResources().getStringArray(R.array.array_str_values);
        for (String str : dummyArr) {
            PagerM pagerM = new PagerM();
            pagerM.setPagerDescription(str);
            pagerMList.add(pagerM);
        }
        return pagerMList;
    }
    

    }