I'm new to programming and Android Studio but have been progressing with my app. I am currently trying to scroll down a gridView that is inflated using a custom array adapter inside a ScreenSlidePagerAdapter using the volume keys. I've been looking at fake touches, nested flings and simply scrolling the view. I've not had much luck so far, possibly because the custom adapter is inside a fragment that is in turn called by the pager adapter. I'm using the onKeyDown method to retrieve the button clicks. Would anybody be able to point me in the right direction?
Here is an example of my code: The main activity public class Share extends 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();
}
}
}
The fragment: public class FragmentViewPagerExample extends 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;
}
}
I'm using a custom parcelable object to pass information to the inflated pages. The layout files are simple linear layouts with TextView and GridView. I can scroll through the pages progamatically but wish to scroll vertically on the grid view using the volume buttons. Thank you for your help.