【问题标题】:Scrolling a child view inside a viewPager using the volume buttons in Android使用 Android 中的音量按钮在 viewPager 中滚动子视图
【发布时间】:2018-01-19 22:20:13
【问题描述】:

我是编程和 Android Studio 的新手,但我的应用程序一直在进步。 我目前正在尝试使用音量键向下滚动使用自定义数组适配器inside ScreenSlidePagerAdapter 膨胀的gridView。我一直在研究虚假的触摸、嵌套的投掷和简单地滚动视图。到目前为止,我运气不佳,可能是因为自定义适配器位于一个片段内,而该片段又由寻呼机适配器调用。 我正在使用 onKeyDown 方法来检索按钮点击。 有人能指出我正确的方向吗?

这是我的代码示例: 主要活动 公共类 Share 扩展 AppCompatActivity {

    PagerAdapter mPagerAdapter;
    ViewPager mPager;

    ArrayList<ExampleObject> examples = new ArrayList<>();

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

        // create list of objects for adapter
        for (int i=0; i<5;i++){
            ExampleObject example = new ExampleObject(getResources().getStringArray(R.array.example_text));
            examples.add(example);
        }

        // Instantiate a ViewPager and a PagerAdapter
        mPager = findViewById(R.id.activity_example_viewpager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);
        mPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                invalidateOptionsMenu();
            }
        });
    }

    // Media button pushes
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                // code to scroll view down inside pager view
                return true;
            case KeyEvent.KEYCODE_VOLUME_UP:
                // code to scroll view up inside pager view
                return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    // Call fragment for pages in adapter
    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        private ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return FragmentViewPagerExample.create(position,examples);
        }

        @Override
        public int getCount() {
            return examples.size();
        }
    }
}

片段: 公共类 FragmentViewPagerExample 扩展 Fragment {

public static final String ARG_PAGE = "page";

private int mPageNumber;

TextView textViewTitle;
GridView gridTextView;

ArrayAdapter<String> gridAdapter;

ArrayList<ExampleObject> exampleObject = new ArrayList<>();
ArrayList<String> exampleText = new ArrayList<>();

public static FragmentViewPagerExample create(int mPageNumber, ArrayList<ExampleObject> examples){
    FragmentViewPagerExample fragment = new FragmentViewPagerExample();
    Bundle args = new Bundle();
    args.putInt(ARG_PAGE,mPageNumber);
    args.putParcelableArrayList("exampleArray",examples);
    fragment.setArguments(args);
    return fragment;
}

public FragmentViewPagerExample(){
}

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    mPageNumber = getArguments().getInt(ARG_PAGE);
    exampleObject = getArguments().getParcelableArrayList("exampleArray");
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.viewpager_example_page, container, false);

    textViewTitle = rootView.findViewById(R.id.text_view_example_title);
    textViewTitle.setText("Title");

    exampleText.clear();
    exampleText.addAll(exampleObject.get(mPageNumber).getText());
    Log.d("Fragment: ","text object size = "+exampleText.size());
    if(exampleText.size()>0) {Log.d("Fragment: ","object 1 text = "+exampleText.get(0));}

    // Changed the custom array adapter to a simple adapter for this example
    gridTextView = rootView.findViewById(R.id.grid_view_example_text);
    gridAdapter = new ArrayAdapter<>(getContext(), R.layout.textview_only, exampleText);
    gridTextView.setAdapter(gridAdapter);

    return rootView;
}
}

我正在使用自定义的 parcelable 对象将信息传递给膨胀的页面。布局文件是带有 TextView 和 GridView 的简单线性布局。我可以程序化地滚动页面,但希望使用音量按钮在网格视图上垂直滚动。 感谢您的帮助。

【问题讨论】:

标签: android gridview scroll


【解决方案1】:

经过一夜的睡眠和几个小时的思考和研究,我找到了解决方案。

我使用广播器从片段侦听和接收的“共享”活动发送意图。收到后,片段使用它自己的内部方法使用 scrollListBy(y value) 滚动 GridView(这也可能是列表视图或滚动视图)。这是另一个有助于回答此问题的问题的链接:

Fragment activity catch onKeyDown and use in fragment

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多