在android中,如何让菜单onClick启动新片段?我在tabLayout中创建片段?如何设置菜单点击启动新片段?查看我的代码,如何在菜单项中单击时显示新片段?
public class NetworkFragment extends Fragment {
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private String mParam1;
private String mParam2;
private TabLayout tabLayout;
private ViewPager viewPager;
public NetworkFragment() {
// Required empty public constructor
}
public static NetworkFragment newInstance(String param1, String param2) {
NetworkFragment fragment = new NetworkFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view =inflater.inflate(R.layout.fragment_network, container, false);
ViewPager viewPager = (ViewPager)view. findViewById(R.id.viewpager);
final PagerAdapter pagerAdapter =
new PagerAdapter(getChildFragmentManager(), getContext());
viewPager.setAdapter(pagerAdapter);
// Give the TabLayout the ViewPager
final TabLayout tabLayout = (TabLayout)view. findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
// Iterate over all tabs and set the custom view
for (int i = 0; i < tabLayout.getTabCount(); i++) {
TabLayout.Tab tab = tabLayout.getTabAt(i);
tab.setCustomView(pagerAdapter.getTabView(i));
}
final ImageView menuView = (ImageView) view.findViewById(R.id.menuView);
menuView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
PopupMenu popup = new PopupMenu(getContext(), v);
popup.getMenuInflater().inflate(R.menu.network_menu, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
//Toast.makeText(getContext(), "You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show();
if(item.getItemId() ==R.id.allLinks){
//new Fragment
}
else if(item.getItemId() ==R.id.networkFavourites){
Toast.makeText(getContext(), "networkFavourites" , Toast.LENGTH_SHORT).show();
}
else if(item.getItemId() ==R.id.CompanyLinks){
Toast.makeText(getContext(), "CompanyLinks" , Toast.LENGTH_SHORT).show();
}
else if(item.getItemId() ==R.id.Company){
Toast.makeText(getContext(), "CompanyLinks" , Toast.LENGTH_SHORT).show();
}
else if(item.getItemId() ==R.id.Industry){
Toast.makeText(getContext(), "CompanyLinks" , Toast.LENGTH_SHORT).show();
}
return true;
}
});
popup.show();
}
});
return view;
}
class PagerAdapter extends FragmentPagerAdapter {
String tabTitles[] = getResources().getStringArray(R.array.network_tab);
Context context;
public PagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public int getCount() {
return tabTitles.length;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new MylinksFragment();
case 1:
return new MyGroupsFragment();
case 2:
return new MyInvitationsFragment();
case 3:
return new MyMessagesFragment();
}
return null;
}
@Override
public CharSequence getPageTitle(int position) {
// Generate title based on item position
return tabTitles[position];
}
public View getTabView(int position) {
View tab = LayoutInflater.from(getContext()).inflate(R.layout.tab_text_layout, null);
TextView tv = (TextView) tab.findViewById(R.id.custom_text);
tv.setText(tabTitles[position]);
return tab;
}
}
}
答案 0 :(得分:0)
其实你的问题并不清楚。但根据我的理解,你想在菜单点击上显示一个新的片段。为此,您必须编写类似
的代码用于API级别2.2及更高级别以及当您使用v4支持jar时
Fragment fragment = new YourFragmentName();// the fragment which you ant to display
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.frame_container,fragment).commit();
用于API级别3.0及更高版本,以及何时不使用v4支持jar
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit();
通过这种方式,您可以替换片段或显示新片段。