2016-03-14 2 views
0

Je fais ma première application dans laquelle, j'utilise des fragments pour les onglets. dans ce que je veux réutiliser un fragment dans d'autres onglets aussi je veux construire Dynamiquement interface utilisateur pour différents onglets sans gonfler XML The Screen shot is hereréutiliser le fragment dans d'autres onglets aussi je veux construire l'interface dynamique pour différents onglets sans gonfler XML

code dans l'activité se présente comme suit

public class Schedules extends AppCompatActivity { 

    private TabLayout tabLayout; 
    private ViewPager viewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_schedules); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

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

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new FragmentOne(), "SCIENCE"); 
     adapter.addFragment(new FragmentOne(), "SOCIAL"); 
     adapter.addFragment(new FragmentOne(), "ENGLISH"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 
     private final List<String> mFragmentDays = new ArrayList<>(); 
     private final List<String> mFragmentTimings = 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); 
     } 
    } 
} 

et le code à l'intérieur du fragment va ici

public class FragmentOne extends Fragment{ 

    LinearLayout lLayout; 
    TextView tView; 

    public FragmentOne() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
return inflater.inflate(R.layout.fragment_one, container, false); 
    } 
} 

Répondre

0

Tout fragment réutilisant doit répondre à certains critères, que son suit le même contexte, ce que je veux dire est l'apparence serait même, mais en fonction des données fournies à l'fragmenter est l'interface utilisateur et des informations displa Si vos fragments ont une structure d'interface et de données complètement différente pour ce fragment, il devra gérer différents scénarios dans lesquels il doit fonctionner différemment, ce qui augmenterait votre surcharge de code dans le même fragment. dans ce cas, vous feriez mieux de faire deux fragments différents. Si vous insistez pour réutiliser le fragment, vous pouvez créer une instance de ce fragment (MyFragment) que vous souhaitez réutiliser et remplir l'interface utilisateur interne et les données en fonction des données et du type que vous fournissez. Veuillez noter que ceci ne fera qu'augmenter votre travail.

MyFragment.newInstance("English","data"); 

MyFragment.newInstance("Social","data"); 

MyFragment.newInstance("Science","data"); 

MyFragment ressemblerait à quelque chose comme ça

public class MyFragment extends Fragment { 
// TODO: Rename parameter arguments, choose names that match 
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
private static final String ARG_PARAM1 = "param1"; 
private static final String ARG_PARAM2 = "param2"; 

// TODO: Rename and change types of parameters 
private String mParam1; 
private String mParam2; 

public MyFragment() { 
    // Required empty public constructor 
} 

public static MyFragment newInstance(String param1, String param2) { 
    MyFragment fragment = new MyFragment(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    if (param1.equalsIgnoreCase("ENGLISH")) { 
     //THIS IS INSTANCE OF ENGLISH TYPE DATA 
    } else if (param1.equalsIgnoreCase("SCIENCE")) { 
     //THIS IS INSTANCE OF SCIENCE TYPE DATA 
    }else if (param1.equalsIgnoreCase("SOCIAL")) { 
     //THIS IS INSTANCE OF SOCIAL TYPE DATA 
    } 
    fragment.setArguments(args); 
    return fragment; 
} 

vous devez faire des conditions dans onCreateView et onActivityCreated méthodes pour faire usage du fragment appropriée en fonction du type de données fourni à ce fragment

+0

merci pour la réponse, mettra en œuvre et voir –

+0

J'ai essayé de mettre en œuvre, mais n'a pas matérialisé d'où, j'ai décidé de construire par programme l'interface utilisateur à l'intérieur du fragment, si quelqu'un a un lien s'il vous plaît me donner t Le lien, qui serait extrêmement utile –

+0

@Naveen, essayez de comprendre comment fonctionne la méthode d'usine, il vous aider à instancier l'objet avec les données que vous voulez montrer afin que vous puissiez prendre la décision dans le code sur la modification de l'interface utilisateur. Vous pouvez utiliser LayoutInflater plusieurs fois pour gonfler la mise en page dans votre code –