2016-05-02 1 views
1

Ich möchte wissen, dass wie kann ich einige verschiedene Daten wie ein Array zu jedem Fragment hinzufügen, die in TabLayout sind? meine ich, dass fragment1 Show array1, fragment2 Show array2 und fragment3 zeigen array3Wie kann ich zu 3 Fragmenten in 3 Tabs unterschiedliche Daten hinzufügen?

die unten ist mein Code für Tablayout:

public class PoshtibaniActivity extends AppCompatActivity { 

private Toolbar toolbar; 
private ViewPager mPager; 
private SlidingTabLayout mTabs; 
private TabLayout tabLayout; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_poshtibani); 
    toolbar = (Toolbar) findViewById(R.id.app_bar_empty); 
    //setSupportActionBar(toolbar); 
    toolbar.setTitle("پشتیبانی"); 
    setSupportActionBar(toolbar); 

    getSupportActionBar().setHomeButtonEnabled(true); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    mPager = (ViewPager) findViewById(R.id.pager); 
    setupViewPager(mPager); 
    mPager.setCurrentItem(2); 

    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(mPager); 

} 

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new FragmentOne(), "پیامهای دریافتی"); 
    adapter.addFragment(new FragmentTwo(), "پیامهای ارسالی"); 
    adapter.addFragment(new FragmentThree(), "ارسال پیام"); 
    viewPager.setAdapter(adapter); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

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

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

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

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

ist es gelöst ??? –

+0

ja es wurde gelöst, aber jetzt möchte ich Daten zum Thema hinzufügen. Ich weiß nicht, wie es geht. weil ich die fragmens eins machen und sie in verschiedenen Aktivitäten verwenden möchte @AdityaVyas – moji

+0

was meinst du mit Daten zum Thema ?? was versuchst du zu erreichen? –

Antwort

1

Sie SetArguement für jedes Ihrer Fragmente verwenden sollten.

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new FragmentOne(), "پیامهای دریافتی",MY_ARRAY_1,MY_SEC_ARRAY_1); 
    adapter.addFragment(new FragmentTwo(), "پیامهای ارسالی",MY_ARRAY_2,MY_SEC_ARRAY_2); 
    adapter.addFragment(new FragmentThree(), "ارسال پیام",MY_ARRAY_3,MY_SEC_ARRAY_3); 
    viewPager.setAdapter(adapter); 
} 

dann in Ihrem Adapter:

public void addFragment(Fragment fragment, String title,Object data,ArrayList<MY_DATA_MODEL> array2) { 
    Bundle mBundle=new Bundle(); 
    mBundle.put("dataArray",data); 
    mBundle.put("dataArray2",array2); 
    fragment.setArgument(mBundle); 
    mFragmentList.add(fragment); 
    mFragmentTitleList.add(title); 
} 

nun in jedem Ihres Fragmente, sollten Sie setArguments außer Kraft setzen und Ihre Daten aus Bündel dort.

Vergessen Sie nicht, Ihr Datenmodell parzellierbar zu machen, wenn Sie es bündeln und abstimmen möchten.

+0

danke. Daten sind JSON-Objekt? wenn ich mehr als 1 Array habe, was soll ich tun? @smartiz – moji

+0

Sie können passieren, was auch immer Sie mögen, aber achten Sie darauf, wenn Sie ein komplexes Datenmodell verwenden, sollten Sie Ihr Modell Parcelable machen. dann können Sie es mit Absichten übergeben. Ich habe meine Antwort für zwei Array bearbeitet. @ moji –

+0

dank dir. Wie kann ich diese Fragmente für mehr als 1 Aktivität verwenden? Ich meine, dass ich dieses Fragment in activityA benutze und wenn Benutzer zu ActivityB ging, dann benutze ich diese Fragmente in ActivityB. Ich möchte 3 Fragmente für 5 Aktivitäten machen, die ähnlich sind. @Smartiz – moji

0

Ansicht Pager Datei

public class SamplePagerAdapter extends FragmentPagerAdapter { 


    String[] title = { 
    "stringA", 
    "stringB", 
    "stringC", 
    } 


    public SamplePagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
    /** Show a Fragment based on the position of the current screen */ 
     if (position == 0) { 
      return FragmentA.newInstance(title); 
     } 
     else if(position==1) 
      { 
      return new FragmentB.newInstance(title); 
      } 

     else { return FragmentC.newInstance(title);} 
    } 

    @Override 
    public int getCount() { 
     // Show 3 total pages. 
     return 3; 
    } 
} 

Fragment Datei

public class FragmentA extends Fragment { 


public static FragmentA newInstance(String [] s) { 
    FragmentA A = new FragmentA(); 
    Bundle args = new Bundle(); 
    args.putStringArrayList("elist",s); 
    A.setArgumentas(args); 
    return A; 
} 

} 


public View onCreateView(LayoutInflater inflater, 
    ViewGroup containerObject, 
    Bundle savedInstanceState){ 
    //here is your arguments 
    Bundle bundle=getArguments(); 

    //here is your list array 
    String[] myStrings=bundle.getStringArray("elist"); 
} 



public class FragmentB extends Fragment { 


public static FragmentB newInstance(String [] s) { 
    FragmentB B = new FragmentB(); 
    Bundle args = new Bundle(); 
    args.putStringArrayList("elist",s); 
    B.setArgumentas(args); 
    return B; 
} 

} 


public View onCreateView(LayoutInflater inflater, 
    ViewGroup containerObject, 
    Bundle savedInstanceState){ 
    //here is your arguments 
    Bundle bundle=getArguments(); 

    //here is your list array 
    String[] myStrings=bundle.getStringArray("elist"); 
} 


public class FragmentC extends Fragment { 


public static FragmentC newInstance(String [] s) { 
    FragmentC C = new FragmentC(); 
    Bundle args = new Bundle(); 
    args.putStringArrayList("elist",s); 
    C.setArgumentas(args); 
    return C; 
} 

} 


public View onCreateView(LayoutInflater inflater, 
    ViewGroup containerObject, 
    Bundle savedInstanceState){ 
    //here is your arguments 
    Bundle bundle=getArguments(); 

    //here is your list array 
    String[] myStrings=bundle.getStringArray("elist"); 
} 
+0

danke. Sie meinen, dass ich Java-Datei für jedes Fragment machen sollte? @ mrugesh-thaker – moji

Verwandte Themen