Hi!
I am trying to do following:
MainActivitiy(starts)-->TabFragment[FragmentPagerAdapter](starts) -->StyleFragment[has 4 Image Buttons to start 4 different Fragments]-->(regarding which is clicked) a proper Fragment should be shown in the next tab.
MainActivity
|
|
TabFragment
|
|
|_ _Tab(Style)
| |_ _ _ Style_Fragment(4 Buttons; Classic, Triple, Quadrupel,Multiple)
|
|
|
|_ _ _ Tab(Bild(Picture))
| |_ _ _ Classic
| |
| |_ _ _ Triple
| |
| |_ _ _ Quadrupel
| |
| |_ _ _ Multiple
|
|_ _ _ Tab C
| |_ _ _ Fragment 7
| |
| |_ _ _ Fragment 8
| |
| |_ _ _ Fragment 8
| |
I am able to pass Arguments from "Style_Fragment" to the "MainActivty" and Update the Tab Position, but I am not able to set the proper Fragment into that tab. I tried different approaches but I could never pass an Argument from Activity to TabFragment (paramter: "style_n") If i hardcoded the paramter "public static style_n = 1"(for style_classic) it shows the proper Fragment in the proper tab-Position. I can change style_n=2(for style_triple) and so on and that works. I tried it with bundles, Parameters for the TabFragment, Bundle, global Arguments for the whole application, a Special data storing class...nothing works. I think it has somehow to do with the Fragment LifeCycle.
Please see following Code:
MainActivity:
import java.nio.BufferUnderflowException;
public class MainActivity extends AppCompatActivity implements fragments_communicate {
DrawerLayout mDrawerLayout;
NavigationView mNavigationView;
FragmentManager mFragmentManager;
FragmentTransaction mFragmentTransaction;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
mNavigationView = (NavigationView) findViewById(R.id.shitstuff) ;
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.containerView, new TabFragment()).addToBackStack(null).commit();
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
mDrawerLayout.closeDrawers();
switch (menuItem.getItemId()) {
case R.id.nav_item_sent:
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.containerView, new OneFragment()).addToBackStack(null).commit();
break;
case R.id.nav_item_inbox:
FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
xfragmentTransaction.replace(R.id.containerView, new OneFragment()).addToBackStack(null).commit();
break;
default:
break;
}
return false;
}
});
android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
toolbar.setLogo(R.mipmap.ic_launcher);
ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout, toolbar,R.string.app_name,
R.string.app_name);
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();
}
public void updateTab(int tab_number, int style_number)
{
TabFragment tfrag = new TabFragment();
tfrag.update_viewPager(tab_number);
}
}
TabFragment:
public class TabFragment extends Fragment {
public static TabLayout tabLayout;
public static ViewPager viewPager;
public static int int_items = 4 ;
public static int style_n =1;
public TabFragment()
{
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View x = inflater.inflate(R.layout.tab_layout,null);
tabLayout = (TabLayout) x.findViewById(R.id.tabs);
viewPager = (ViewPager) x.findViewById(R.id.viewpager);
viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
return x;
}
public class MyAdapter extends FragmentPagerAdapter{
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position)
{
switch (position){
case 0 : return new StyleFragment();
case 1 :
if (style_n == 1) {
return new StyleClassicFragment();
}
else if (style_n == 2)
{
return new StyleTripleFragment();
}
else if (style_n == 3)
{
return new StyleQuadrupelFragment();
}
else if (style_n == 4)
{
return new StyleMultipleFragment();
}
case 2: return new OneFragment();
case 3: return new PictureFragment();
}
return null;
}
@Override
public int getCount() {
return int_items;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position){
case 0 :
return "Style";
case 1 :
return "Bild";
case 2 :
return "One";
case 3 :
return "Picture";
}
return null;
}
}
public void update_viewPager(int tab_number)
{
viewPager.setCurrentItem(tab_number);
}
}
Style_Fragment:
package com.sub_zero.ipostcard.fragments.tabs.Style;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import com.sub_zero.ipostcard.R;
import com.sub_zero.ipostcard.interf.fragments_communicate;
public class StyleFragment extends Fragment implements View.OnClickListener {
View rootView;
fragments_communicate fc;
ImageButton imageButton_classic, imageButton_triple, imageButton_quadrupel, imageButton_multiple ;
public StyleFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_style, container, false);
imageButton_classic = (ImageButton) rootView.findViewById(R.id.imageButton_style_classic);
imageButton_classic.setOnClickListener(this);
imageButton_triple = (ImageButton) rootView.findViewById(R.id.imageButton_style_triple);
imageButton_triple.setOnClickListener(this);
imageButton_quadrupel = (ImageButton) rootView.findViewById(R.id.imageButton_style_quadrupel);
imageButton_quadrupel.setOnClickListener(this);
imageButton_multiple = (ImageButton) rootView.findViewById(R.id.imageButton_style_multiple);
imageButton_multiple.setOnClickListener(this);
fc = (fragments_communicate) getActivity();
return rootView;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.imageButton_style_classic:
fc.updateTab(1, 1);
break;
case R.id.imageButton_style_triple:
fc.updateTab(1, 2);
break;
case R.id.imageButton_style_quadrupel:
fc.updateTab(1, 3);
break;
case R.id.imageButton_style_multiple:
fc.updateTab(1, 4);
}
}
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
}
@Override
public void onDetach()
{
super.onDetach();
}
}
Interface (Fragment_communicate):
public interface fragments_communicate{
public void updateTab(int tab_number, int style_number);
}