0

I'm new at Android programming and I need your help. Please. What I want to do.

I created listview, from listview I created OnItemClickListener to TabbedActivity.

Now I want for each listView item to show different fragments on TabbedActivity.

This is the listView activity

public class BookListActivity extends AppCompatActivity {

    android.support.v7.widget.Toolbar toolbar;
    ListView listView;

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

        toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle("Best Selling Books by Author");
        listView = (ListView) findViewById(R.id.listView);

        ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(SongListActivity.this,
                android.R.layout.simple_list_item_1,
                getResources().getStringArray(R.array.bookList));

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

Intent intent = new Intent(ListViewActivity.this, TabbedActivity.class);
intent.putExtra("BookList", listView.getItemAtPosition(i).toString());
startActivity(intent);
            }
        });


        listView.setAdapter(mAdapter);
    }
}

Here is my Tabbed Activity

public class TabbedActivity extends AppCompatActivity {

    private static final String TAG = "HymnActivity";

    private SectionsPageAdapter mSectionsPageAdapter;

    private ViewPager mViewPager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hymn);
        Log.d(TAG, "onCreate: Starting");

        mSectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());

        mViewPager = (ViewPager) findViewById(R.id.container);
        setupViewPager(mViewPager);

//        Bundle bundle = getIntent().getExtras();
//        if(bundle != null) {
////           HOW SHOULD I IMPLEMENT THIS
//        }

    }

    private void setupViewPager(ViewPager viewPager) {
        SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
        adapter.addFragment(new Book1(), "Book1");
        adapter.addFragment(new Book2(), "Book2");
        adapter.addFragment(new Book3(), "Book3");
        adapter.addFragment(new Book4(), "Book4");
        adapter.addFragment(new Book5(), "Book5");
        adapter.addFragment(new Book6(), "Book6");
        adapter.addFragment(new Book7(), "Book7");
        adapter.addFragment(new Book8(), "Book8");
        adapter.addFragment(new Book9(), "Book9");
        adapter.addFragment(new Book10(), "Book10");

        viewPager.setAdapter(adapter);
    }


}

Here is my SectionsPagerAdapter

public class SectionsPageAdapter extends FragmentPagerAdapter {

    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();


    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }


    public SectionsPageAdapter(FragmentManager fm) {

        super(fm);
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

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

This is one of my fragments

public class Book274 extends Fragment {
    private static final String TAG = "Book274";

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
            @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.book274, container, false);

        return view;
    }
}

So far, the tabbed fragment works very well when i slide through them. But I cant go to a specific slide. It would always start from the beginning and i have over 200 tabs

That is why i want to implement the listView tab. So that from the listView i can visit a specific tab/fragment of my choice and still slide from there forward or backwards.

Thanks Papi.

pappii3d
  • 69
  • 1
  • 7

1 Answers1

0

Pass the tab number which you want to open in the intent.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

        Intent intent = new Intent(ListViewActivity.this, TabbedActivity.class);
        intent.putExtra("tabNum", i); //which tab number you want to open
        startActivity(intent);
        }
    });

Now extract the intent data in the TabbedActivity (the activity where you are hosting the fragments), something like this:

String tabNum = intent.getExtras().getString("tabNum");

And set the viewPager to that number:

viewPager.setCurrentItem(tabNum);
Prashanth Verma
  • 588
  • 3
  • 11
  • Thanks Prashanth,How do i implement this for all tabs? Is there no way of passing all tabs as a bundle and using some if else statement in the tabbedActivity with some key? – pappii3d Sep 02 '18 at 02:50
  • Sorry bro, I got confused. What are their "tabNum"? I am passing a listView to tabs. did you mean list number? How to pass the list data? – pappii3d Sep 02 '18 at 03:54
  • If you see the code right, i did this "intent.putExtra("tabNum", i)", where "i" means the tab number. If you want to pass something else then add another field of "intent.putExtra()" like your list data – Prashanth Verma Sep 04 '18 at 07:15