【发布时间】: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 的简单线性布局。我可以程序化地滚动页面,但希望使用音量按钮在网格视图上垂直滚动。 感谢您的帮助。
【问题讨论】:
-
Shawn,我想你是在建议我应该添加一些代码,所以我编辑了我的帖子。