-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;