-1

you can download my zip here更改Android碎片页面

行,所以我开发的应用与刷卡+ Tab键查看我想每个选项卡显示一个不同势.XML页面如果u点击上面你可以下载我的工作空间来编辑它..我真的需要帮助请spicific,如果你想我可以设置teamviwer,如果它可以更快..如果你不想下载文件因为你认为“它有一个病毒”只是在这里下面的回复是我的主要代码.java

package twh.reviser.root; 

import java.util.Locale; 


import android.os.Bundle; 
import android.renderscript.Int2; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.NavUtils; 
import android.support.v4.view.ViewPager; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class MainActivity extends FragmentActivity { 

/** 
* The {@link android.support.v4.view.PagerAdapter} that will provide 
* fragments for each of the sections. We use a 
* {@link android.support.v4.app.FragmentPagerAdapter} derivative, which 
* will keep every loaded fragment in memory. If this becomes too memory 
* intensive, it may be best to switch to a 
* {@link android.support.v4.app.FragmentStatePagerAdapter}. 
*/ 
SectionsPagerAdapter mSectionsPagerAdapter; 

/** 
* The {@link ViewPager} that will host the section contents. 
*/ 
ViewPager mViewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the app. 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 



/** 
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
* one of the sections/tabs/pages. 
*/ 
public class SectionsPagerAdapter extends FragmentPagerAdapter { 

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

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a DummySectionFragment (defined as a static inner class 
     // below) with the page number as its lone argument. 
     Fragment fragment = new DummySectionFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); 
     fragment.setArguments(args); 
     return fragment; 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     Locale l = Locale.getDefault(); 
     switch (position) { 
      case 0: 
       return getString(R.string.title_section1).toUpperCase(l); 
      case 1: 
       return getString(R.string.title_section2).toUpperCase(l); 
      case 2: 
       return getString(R.string.title_section3).toUpperCase(l); 
     } 
     return null; 
    } 
} 

/** 
* A dummy fragment representing a section of the app, but that simply 
* displays dummy text. 
*/ 
public static class DummySectionFragment extends Fragment { 
    /** 
    * The fragment argument representing the section number for this 
    * fragment. 
    */ 
    public static final String ARG_SECTION_NUMBER = "section_number"; 

    public DummySectionFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false); 
     TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label); 
      dummyTextView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER))); 
     return rootView; 
    } 
} 

} 
+0

什么是不实际工作? – Greensy

+0

@Greensy对不起,如果我让这个不清楚,所以我有3个选项卡t1 t2 t3当我在t1上我希望它显示一个新的xml页面和t2相同的东西,所以即时通讯有问题使xml更改,当它去一个新的标签..任何想法或帮助? –

+0

像每个部分或选项卡应该是不同的和shwo不同的东西在选项卡1中应该有一个按钮tab2文本选项卡3图像,但我如何使显示不同的活动或片段? –

回答

1

下面是我的适配器的一个示例,它解决了您的问题。 TabsPagerAdapter只是单独的类。

/** 
* This is a helper class that implements the management of tabs and all 
* details of connecting a ViewPager with associated TabHost. It relies on a 
* trick. Normally a tab host has a simple API for supplying a View or 
* Intent that each tab will show. This is not sufficient for switching 
* between pages. So instead we make the content part of the tab host 
* 0dp high (it is not shown) and the TabsAdapter supplies its own dummy 
* view to show as the tab content. It listens to changes in tabs, and takes 
* care of switch to the correct paged in the ViewPager whenever the selected 
* tab changes. 
*/ 
public class TabsPagerAdapter extends FragmentPagerAdapter implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener{ 
    private final Context mContext; 
    private final TabHost mTabHost; 
    private final ViewPager mViewPager; 
    private final OnPageChangeListener mListener; 
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 
    private final FragmentManager mFragmentManager; 






    static final class TabInfo { 
     private final String tag; 
     private final Class<?> clss; 
     private final Bundle args; 

     TabInfo(String _tag, Class<?> _class, Bundle _args) { 
      tag = _tag; 
      clss = _class; 
      args = _args; 
     } 
    } 

    static class DummyTabFactory implements TabHost.TabContentFactory { 
     private final Context mContext; 

     public DummyTabFactory(Context context) { 
      mContext = context; 
     } 

     @Override 
     public View createTabContent(String tag) { 
      View v = new View(mContext); 
      v.setMinimumWidth(0); 
      v.setMinimumHeight(0); 
      return v; 
     } 
    } 

    public void addTab(String label, String tag, Drawable drawable, Class<?> c, int resourse) { 
     addTab(this.mContext, label, tag, drawable, c, resourse); 
    } 

    public void addTab(Context context, String label, String tag, Drawable drawable, Class<?> c, int resourse) { 
     Intent intent = new Intent(context, c); 
     TabHost.TabSpec spec = mTabHost.newTabSpec(tag); 

     View tabIndicator = LayoutInflater.from(context).inflate(resourse, (TabWidget)mTabHost.findViewById(android.R.id.tabs), false); 

     ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon); 
     icon.setImageDrawable(drawable); 
     icon.setScaleType(ImageView.ScaleType.FIT_CENTER); 

     spec.setIndicator(tabIndicator); 
     spec.setContent(intent); 
     this.addTab(spec, c, null); 
    } 

    public TabsPagerAdapter(FragmentActivity activity, TabHost tabHost, ViewPager pager, OnPageChangeListener listener, FragmentManager manager) { 
     super(manager); 
     mFragmentManager = manager; 
     mContext = activity; 
     mTabHost = tabHost; 
     mViewPager = pager; 
     mListener = listener; 
     mTabHost.setOnTabChangedListener(this); 
     mViewPager.setAdapter(this); 
     mViewPager.setOnPageChangeListener(this); 

    } 

    public void addTab(TabHost.TabSpec tabSpec, Class<?> clss, Bundle args) { 
     tabSpec.setContent(new DummyTabFactory(mContext)); 
     String tag = tabSpec.getTag(); 

     TabInfo info = new TabInfo(tag, clss, args); 
     mTabs.add(info); 
     mTabHost.addTab(tabSpec); 
     notifyDataSetChanged(); 
    } 

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


    @Override 
    public CharSequence getPageTitle (int position){ 

    } 



    public Fragment getCurrentFragment() { 
     return getFragmentAt(mTabHost.getCurrentTab()); 
    } 

    public Fragment getFragmentAt(int position){ 
     return mFragmentManager.findFragmentByTag("android:switcher:" + mViewPager.getId() + ":" + position); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     TabInfo info = (TabInfo) mTabs.get(position); 
     return Fragment.instantiate(mContext, info.clss.getName(), info.args); 
    } 

    @Override 
    public void onTabChanged(String tabId) { 
     //called when the user clicks on a tab. 
     int position = mTabHost.getCurrentTab(); 
     if(mViewPager.getCurrentItem() != position){ 
      mViewPager.setCurrentItem(position); 
     } 
    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
     if(mListener!=null){ 
      mListener.onPageScrolled(position, positionOffset, positionOffsetPixels); 
     } 
    } 

    @Override 
    public void onPageSelected(int position) { 
     // Unfortunately when TabHost changes the current tab, it kindly 
     // also takes care of putting focus on it when not in touch mode. 
     // The jerk. 
     // This hack tries to prevent this from pulling focus out of our 
     // ViewPager. 
     TabWidget widget = mTabHost.getTabWidget(); 
     int oldFocusability = widget.getDescendantFocusability(); 
     widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); 
     mTabHost.setCurrentTab(position); 
     widget.setDescendantFocusability(oldFocusability); 
     if(mListener!=null){ 
      mListener.onPageSelected(position); 
     } 

    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
     if(mListener!=null){ 
      mListener.onPageScrollStateChanged(state); 
     } 
    } 
} 

这是一个微小的修改的android例子framentadapter。

用法示例 MainActivity.java

class MainActivity extends FragmentActivuty{ 

public void onCreate(Bundle savedInstanceState){ 
    setContentView(R.layout.activity_main); 

    mTabHost = (TabHost) findViewById(android.R.id.tabhost); 
    mTabHost.setup(); 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mTabsAdapter = new TabsPagerAdapter(this, mTabHost, mViewPager,null, getSupportFragmentManager()); 

    mTabsAdapter.addTab("Button", "button",getResources().getDrawable(R.drawable.yourdrawable), 
    ButtonFragment.class, R.layout.yourtablayout); 

    mTabsAdapter.addTab("Text","text",getResources().getDrawable(R.drawable.yourdrawable), TextFragment.class, R.layout.yourtablayout); 


    //This is needed so your tabs do not reload each time 
    mViewPager.setOffscreenPageLimit(mTabsAdapter.getCount()); 

} 
+0

即时通讯仍然困惑,所以我将此添加到我的MainActivity.java或者我替换MainActivity.java与此 –

+0

我会添加一些评论 – Greensy

+0

我认为四想通了这一点...绿色如果我不知道你会愿意与我一起团队观察? –

0

我整合了一些代码,我与你提供的代码中写道。我认为这应该工作,根据您使用通用的Android ADT设置。

package twh.reviser.root; 

import java.util.Locale; 


import android.os.Bundle; 
import android.renderscript.Int2; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.NavUtils; 
import android.support.v4.view.ViewPager; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class MainActivity extends FragmentActivity { 

    static final int NUM_ITEMS = 3; 

    /** 
    * The {@link android.support.v4.view.PagerAdapter} that will provide 
    * fragments for each of the sections. We use a 
    * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which 
    * will keep every loaded fragment in memory. If this becomes too memory 
    * intensive, it may be best to switch to a 
    * {@link android.support.v4.app.FragmentStatePagerAdapter}. 
    */ 
    SectionsPagerAdapter mSectionsPagerAdapter; 

    /** 
    * The {@link ViewPager} that will host the section contents. 
    */ 
    ViewPager mViewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     // Create the adapter that will return a fragment for each of the three 
     // primary sections of the app. 
     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

    /** possibly missing from your code*/ 
     // For each of the sections in the app, add a tab to the action bar. 
     for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { 
      actionBar.addTab(actionBar.newTab() 
        .setText(mSectionsPagerAdapter.getPageTitle(i)) 
        .setTabListener(this)); 
     } 
    } 

    @Override 
    public void onTabSelected(ActionBar.Tab tab, 
      FragmentTransaction fragmentTransaction) { 
     // When the given tab is selected, switch to the corresponding page in 
     // the ViewPager. 
     mViewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(ActionBar.Tab tab, 
      FragmentTransaction fragmentTransaction) { 
    } 

    @Override 
    public void onTabReselected(ActionBar.Tab tab, 
      FragmentTransaction fragmentTransaction) { 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    /** 
    * A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
    * one of the sections/tabs/pages. 
    */ 
    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     Context c; 

     public SectionsPagerAdapter(Context c,FragmentManager fm) { 
      super(fm); 
      this.c = c;   
     } 

     @Override 
     public Fragment getItem(int position) { 

      Fragment fragment = null; 

      if (position == 0) { 

       fragment = new FragmentPage1(c); 

       Bundle args = new Bundle(); 
       args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); 
       fragment.setArguments(args); 

       } 

      if (position == 1) { 

       fragment = new FragmentPage2(c); 

       Bundle args = new Bundle(); 
       args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); 
       fragment.setArguments(args); 

       } 
      if (position == 2) { 

       fragment = new FragmentPage3(c); 

       Bundle args = new Bundle(); 
       args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); 
       fragment.setArguments(args); 

      } 
      return fragment; 
     } 

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

     @Override 
     public CharSequence getPageTitle(int position) { 
      Locale l = Locale.getDefault(); 
      switch (position) { 
       case 0: 
        return getString(R.string.title_section1).toUpperCase(l); 
       case 1: 
        return getString(R.string.title_section2).toUpperCase(l); 
       case 2: 
        return getString(R.string.title_section3).toUpperCase(l); 
      } 
      return null; 
     } 
    } 

    /** 
    * A dummy fragment representing a section of the app, but that simply 
    * displays dummy text. 
    */ 
    public static class DummySectionFragment extends Fragment { 
     /** 
     * The fragment argument representing the section number for this 
     * fragment. 
     */ 
     public static final String ARG_SECTION_NUMBER = "section_number"; 

     public DummySectionFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false); 
      TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label); 
       dummyTextView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER))); 
      return rootView; 
     } 
    } 

} 

为每个在res /布局的三个片段的创建三个XML文件/

Fragment_1.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" > 
    <TextView 
     android:id="@+id/textview1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

Fragment_2.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" > 
    <TextView 
     android:id="@+id/textview1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

Fragment_3.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" > 
    <TextView 
     android:id="@+id/textview1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

创建中的src/twh.reviser.root三个片段三个Java文件

FragmentPage1.java

package twh.reviser.root; 

public class FragmentPage1 extends Fragment { 

    Context c; 

    public FragmentInputPage1(){ 
    } 

    public FragmentInputPage1(Context c) { 
     this.c = c; 
    } 

    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View v = inflater.inflate(R.layout.Fragment_1, null); 

     return v; 

    } 
} 

FragmentPage2.java

package twh.reviser.root; 

public class FragmentPage2 extends Fragment { 

    Context c; 

    public FragmentInputPage2(){ 
    } 

    public FragmentInputPage2(Context c) { 
     this.c = c; 
    } 

    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View v = inflater.inflate(R.layout.Fragment_2, null); 

     return v; 

    } 
} 

FragmentPage3.java

package twh.reviser.root; 

public class FragmentPage3 extends Fragment { 

    Context c; 

    public FragmentInputPage3(){ 
    } 

    public FragmentInputPage3(Context c) { 
     this.c = c; 
    } 

    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View v = inflater.inflate(R.layout.Fragment_3, null); 

     return v; 

    } 
} 

如果你希望从具有以下公共变量另一个片段您可以使用下面的,基于FragmentPage1得到一个id的值宣告

public static String a,b,c; 

在FragmentPage1.java

public class FragmentPage3 extends Fragment { 

Context c; 

String a = ""; 
String b = ""; 
String c = ""; 

@Override  
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.Fragment_3, null); 

    a = FragmentPage1.a; 
    b = FragmentPage1.b; 
    c = FragmentPage1.c;