当前位置: 首页 > 知识库问答 >
问题:

Viewpager2从活动中的选定项目获取数据

商鸿哲
2023-03-14

我想在带有toast的活动上显示viewpager2中的所选项目描述。

如何从viewpager获取数据?

我可以显示项目位置,但我想用toast显示所选项目描述。

对不起,我的英语不好。

谢谢你的帮助。

我的代码如下所示;

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\u str\u值:

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

我的适配器:

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;
    }
}

共有1个答案

梁锋
2023-03-14

使列表页面列出您的活动字段。

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

然后在你的onPageSelected方法中按位置获取数据。

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;
}

}

 类似资料:
  • 问题内容: 如何从JavaFX中的中获取所选项目? 我目前正在使用 但这并没有给我返回选择模型中的一个选择项。 问题答案: 好的,假设您有一个名为的数据模型类。这条路: 请注意,必须使用a 作为类型参数以避免转换: 要么 选择行后,您将返回一个实例。然后对该实例执行任何您想要的操作。

  • 我目前正在使用 但这并没有返回选择模型中的一个选定项。

  • 它可能得到当前的活动选项卡在火狐使用硒?我创建的应用程序是半自动的(用户正在打开标签,如果他想转储其中一个,他只是点击热键)。 但我有问题,当用户打开多个标签,我需要知道哪一个我应该切换到转储网站。

  • 我正在创建一个屏幕,上面有四个列表。基本上是两对列表,您可以在对中的一个列表上选择行,然后将它们移动到对中的另一个列表。 查看文档,我需要为每个列表提供一个ListSelectionModel来确定选择了哪些行。我将使用[Sel]或[Des]按钮来执行实际的传输。 文档和示例说我需要一个ListSelectionListener,但是,由于在用户单击按钮之前我不会访问模型,所以我实际上需要一个监听

  • 我正在将我的代码从使用< code>androidx.viewpager更新为< code>androidx.viewpager2。我正在翻阅一个不确定数量的片段,这些片段显示了从数据库中检索到的数据记录。加载视图分页器并对我的数据进行分页运行得很好,但是我在删除项目和更新分页器适配器时遇到了一些问题。我想通过调用我的适配器上的< code>removeItem()方法(参见下面的代码)在任何给定

  • 我有一个启用了的JList,我希望将项的选择顺序传递给另一个进程。 我尝试在JList上使用并检查是否将其添加到数组中,但是,这不会添加位于选定项之下的新项,它只添加位于JList中当前选定项之上的项。 我要做的事情有什么明显的错误吗?