[英]How to change the fragment of a Tab with a new fragment on the same tab with ActionBarSherlock
我对这个很棒的图书馆有疑问。 我有一个带有4个标签的MainActivity:
public class MainActivity extends SherlockFragmentActivity {
// Declare Variables
ActionBar mActionBar;
ViewPager mPager;
Tab tab;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the view from activity_main.xml
SharedPreferences pref= getSharedPreferences("wizard", 0);
SharedPreferences.Editor editor = pref.edit();
String isOkWizard= pref.getString("isOkWizard", null); //prelevo lo stato dello wizard
if(isOkWizard!=null){
//abilita tutto
}else{
Toast.makeText(this, ""
}
setContentView(R.layout.activity_main);
//toggleFullscreen(true);
// setTheme(R.style.Theme_Sherlock_NoActionBar);
// Activate Navigation Mode Tabs
mActionBar = getSupportActionBar();
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Locate ViewPager in activity_main.xml
mPager = (ViewPager) findViewById(R.id.pager);
// Activate Fragment Manager
FragmentManager fm = getSupportFragmentManager();
// Capture ViewPager page swipes
ViewPager.SimpleOnPageChangeListener ViewPagerListener = new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
// Find the ViewPager Position
mActionBar.setSelectedNavigationItem(position);
}
};
mPager.setOnPageChangeListener(ViewPagerListener);
// Locate the adapter class called ViewPagerAdapter.java
ViewPagerAdapter viewpageradapter = new ViewPagerAdapter(fm);
// Set the View Pager Adapter into ViewPager
mPager.setAdapter(viewpageradapter);
// Capture tab button clicks
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// Pass the position on tab click to ViewPager
mPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
};
// Create first Tab
tab = mActionBar.newTab().setText("Tab1").setTabListener(tabListener);
mActionBar.addTab(tab);
// Create second Tab
tab = mActionBar.newTab().setText("Tab2").setTabListener(tabListener);
mActionBar.addTab(tab);
// Create third Tab
tab = mActionBar.newTab().setText("Tab3").setTabListener(tabListener);
mActionBar.addTab(tab);
// Create 4 Tab
tab = mActionBar.newTab().setText("Tab4").setTabListener(tabListener);
mActionBar.addTab(tab);
}
现在在第一个选项卡中,我有一个Fragment1,其中有5个按钮可打开一个新片段。 我的问题是用从按钮侦听器调用的新片段替换此片段。 这是我的第一个标签的fragment1:
public class FragmentTab1 extends SherlockFragment {
static Context context;
@Override
public SherlockFragmentActivity getSherlockActivity() {
return super.getSherlockActivity();
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Get the view from fragmenttab1.xml
// View view = inflater.inflate(R.layout.fragmenttab1, container, false);
RelativeLayout view = (RelativeLayout) inflater.inflate(R.layout.fragmenttab1,
container, false);
context=getActivity();
Button guasti = (Button) view.findViewById(R.id.bGuasti);
Button segnala = (Button) view.findViewById(R.id.segnalaDisservizio);
guasti.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Fragment newFragment = new FragmentTab2();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment1, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
}
});
segnala.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(hasConnection()){
Intent i= new Intent(getActivity(), SegnalaDisservizioActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(i);
}else{
Toast.makeText(context, "Devi avere una connessione attiva per usurfruire del servizio", 3000).show();
}
}
});
return view;
}
public static boolean hasConnection() {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiNetwork = cm
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifiNetwork != null && wifiNetwork.isConnected()) {
return true;
}
NetworkInfo mobileNetwork = cm
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mobileNetwork != null && mobileNetwork.isConnected()) {
return true;
}
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnected()) {
return true;
}
return false;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
setUserVisibleHint(true);
}
我相信您的所有5个片段都可以通过ViewPagerAdapter
进行管理。
在您的活动中定义一个公共方法,例如
//tabNumber from 0 to 4
public void nextPage(int tabNumber)
{
mPager.setCurrentItem(tabNumber);
}
然后从您的片段中调用
int tab =1; //or any number
MainActivity mainActivity = (MainActivity)getActivity();
mainActivity.nextPage(tab);
您的片段将自动移至指定编号。
我建议你下载从JakeWharton视图寻呼机演示应用程序在这里和源代码相同的位置 。 下次当您陷入困境时,您只需检查该应用程序的必需功能,并向船长学习即可。
编辑!!!
如果要完全替换该片段,则应在适配器中进行管理,或者不应该使用View pager。
检查此问题是否符合您的要求。 无论如何,请尝试使您的问题尽可能清楚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.