0

回答:OKE從這裏的主人那裏得到很大的幫助uDevel說服我說我的方式錯了。我發現,救了我的屁股,我花了大約10來獲得我的屎就聚集了類似的問題...... 在這裏你去:How to implement a ViewPager with different Fragments/Layouts連接到活動的多個碎片存在的問題

問題:

我知道有這裏有一些關於碎片的問題,但我沒有在那裏找到我的答案。

我想連接三個片段到CalendarActivity。我認爲最好在代碼中解釋。

我得到的錯誤是http://postimg.org/image/aca9ndfdb/ 我已經嘗試了許多不同的進口,但我不能像如何實現此所以希望得到一些幫助。 如果我刪除android.app當我創建一個fragmentMananger/fragmentTransaction我得到:http://postimg.org/image/dy2av2zp9/

這裏是CalendarActicity

package ru.calendar; 

import android.app.ActionBar; 
import android.app.ActionBar.TabListener; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
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.view.ViewPager; 
import android.util.Log; 

import jBerry.MySugar.R; 

public class CalendarActivity extends FragmentActivity implements TabListener { 

    @Override 
    protected void onCreate(Bundle arg0) { 
     super.onCreate(arg0); 
     setContentView(R.layout.activity_calendar); 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     FragmentA frag = new FragmentA(); 
     fragmentTransaction.replace(android.R.id.content, frag); 

     fragmentTransaction.commit(); 



     ActionBar actionBar; 
     ViewPager viewPager; 

     viewPager = (ViewPager) findViewById(R.id.calendarContainer); 
     viewPager.setAdapter(new MyAdapter(getSupportFragmentManager())); 
     viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int arg0) { 
       actionBar.setSelectedNavigationItem(arg0); 
       // Intent intent = new Intent(this, CalendarActivity.class); 
       // startActivity(intent); 
       Log.d("DpoiNT", "onPageSelected at " + " position " + arg0); 

      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
       // Log.d("DpoiNT", "onPageScrolled at "+" position " +arg0+" from " +arg1+" with number of pixels "+arg2); 

      } 


      @Override 
      public void onPageScrollStateChanged(int arg0) { 
       if(arg0== ViewPager.SCROLL_STATE_IDLE){ 
        Log.d("DpoiNT", "onPageScrollStateChanged Idle"); 
       } 
       if(arg0== ViewPager.SCROLL_STATE_DRAGGING){ 
        Log.d("DpoiNT", "onPageScrollStateChanged Dragging"); 
       } 
       if(arg0== ViewPager.SCROLL_STATE_SETTLING){ 
        Log.d("DpoiNT", "onPageScrollStateChanged Settling"); 
       } 

      } 
     }); 

    actionBar = getActionBar(); 
    assert actionBar != null; 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    ActionBar.Tab tab1=actionBar.newTab(); 
    tab1.setText("Tab 1"); 
    tab1.setTabListener(this); 

    ActionBar.Tab tab2=actionBar.newTab(); 
    tab2.setText("Tab 2"); 
    tab2.setTabListener(this); 

    ActionBar.Tab tab3=actionBar.newTab(); 
    tab3.setText("Tab 3"); 
    tab3.setTabListener(this); 

    actionBar.addTab(tab1); 
    actionBar.addTab(tab2); 
    actionBar.addTab(tab3); 
} 


    @Override 
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
     // Log.d("DpoiNT", "onTabSelected at "+" position " +tab.getPosition()+" name "+tab.getText()); 
     viewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
     // Log.d("DpoiNT", "onTabUnselected at "+" position " +tab.getPosition()+" name "+tab.getText()); 

    } 

    @Override 
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
     // Log.d("DpoiNT", "onTabReselected at "+" position "+tab.getPosition()+" name "+tab.getText()); 

    } 
} 


class MyAdapter extends FragmentPagerAdapter { 


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



    @Override 
    public Fragment getItem(int arg0) { 
     Fragment fragment=null; 
     if(arg0 == 0) { 
      fragment = new FragmentA(); 
     } 

     if(arg0 == 1) { 
     fragment = new FragmentB(); 
     } 

     if(arg0 == 2) { 
      fragment = new FragmentC(); 
     } 

     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 
} 

這裏是CalendarActivity(activity_calendar)的XML:

<android.support.v4.view.ViewPager 
<!-- ViewPager for swipe function in CalendarActivity --> 

    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="ru.calendar.CalendarActivity" 
    android:id="@+id/calendarContainer"> 

    <fragment 
     android:id="@+id/fragment_a" 
     android:layout_weight="1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:background="#ffffff" 
     class="ru.calendar.FragmentA" /> 

    <fragment 
     android:id="@+id/fragment_b" 
     android:layout_weight="2" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     class="ru.calendar.FragmentB" /> 

    <fragment 
     android:id="@+id/fragment_c" 
     android:layout_weight="2" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     class="ru.calendar.FragmentC" /> 

</android.support.v4.view.ViewPager> 

這就是一個fragment.xml的樣子:

public class FragmentA extends Fragment { 

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

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

編輯這低於CalendarActivity的一部分...

viewPager = (ViewPager) findViewById(R.id.calendarContainer); 
    viewPager.setAdapter(new MyAdapter(getSupportFragmentManager())); 
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int arg0) { 
      actionBar.setSelectedNavigationItem(arg0); 
      // Intent intent = new Intent(this, CalendarActivity.class); 
      // startActivity(intent); 
      Log.d("DpoiNT", "onPageSelected at " + " position " + arg0); 

     } 

     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) { 
      // Log.d("DpoiNT", "onPageScrolled at "+" position " +arg0+" from " +arg1+" with number of pixels "+arg2); 

     } 


     @Override 
     public void onPageScrollStateChanged(int arg0) { 
      if(arg0== ViewPager.SCROLL_STATE_IDLE){ 
       Log.d("DpoiNT", "onPageScrollStateChanged Idle"); 
      } 
      if(arg0== ViewPager.SCROLL_STATE_DRAGGING){ 
       Log.d("DpoiNT", "onPageScrollStateChanged Dragging"); 
      } 
      if(arg0== ViewPager.SCROLL_STATE_SETTLING){ 
       Log.d("DpoiNT", "onPageScrollStateChanged Settling"); 
      } 

     } 
    }); 


class MyAdapter extends FragmentPagerAdapter { 
    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
     Fragment fragment=null; 
     if(arg0 == 0) { 
      fragment = new FragmentA(); 
     } 

     if(arg0 == 1) { 
      fragment = new FragmentB(); 
     } 

     if(arg0 == 2) { 
      fragment = new FragmentC(); 
     } 

     return fragment; 
    } 

    @Override 
    public int getCount() { 
    return 3; 
    } 
} 
+0

這不是你如何查看帶有片段的尋呼機。 – uDevel

回答

0

這不是你該怎麼辦視圖尋呼機用片段得到它;你需要使用PagerAdapter,並且你沒有在xml中定義你的片段,它應該由適配器在代碼中動態實例化。

http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html http://developer.android.com/training/animation/screen-slide.html

的碼本部分僅用於默認佈局和單一片段。

android.app.FragmentManager fragmentManager = getFragmentManager(); 
android.app.FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
FragmentA frag = new FragmentA(); 
fragmentTransaction.replace(android.R.id.content, frag); 

fragmentTransaction.commit(); 

只要按照視圖尋呼機的指南。

或者,如果您想要在同一活動中有多個片段,並且在同一屏幕上同時顯示,則不使用視圖尋呼機。您需要一個根視圖組,並在主xml中使用少數視圖組,並使用您在上面獲得的代碼。

​​

你已經下定決心要先做什麼。

+0

是的,你是正確的先生,我在CalendarActivity中使用它。你有任何其他想法,我是否正確使用它? –

+0

你使用什麼?查看傳呼機?或同一頁面上的多個片段? 對於viewpager,http://developer.android.com/training/animation/screen-slide.html爲您提供99%的viewpager實現。 – uDevel

+0

檢查我的代碼編輯在這裏.. –

0

您正在使用從支持庫的片段。對於他們你必須使用SupportFragmentManager。您可以通過調用

getSupportFragmentManager() 

代替

getFragmentManager() 
+0

是的perherps你是對的,我確實使用getSupportFragment()在某些時候,我改變了它在調試過程中的礦井大聲笑.. –

+0

這裏是我得到的支持[點擊我](http:///postimg.org/image/uxvxnt0ox/) –