2016-05-11 4 views
0

あるフラグメントを別のフラグメントに移動しようとします。ここでは、このプロセスを実行するためにボタンを使用します。これを実行すると、最後に空白の画面が表示されます。Androidはあるフラグメントを別のものにナビゲートしていますが、他のフラグメントの背景を見ることはできません。

これらは私が4分の1に第三の断片をナビゲートしたかった

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.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 

public class MainActivity extends FragmentActivity { 

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

     final int page=2; 

     final ViewPager pager = (ViewPager) findViewById(R.id.viewPager); 

     pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager())); 
     pager.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (pager.getCurrentItem()==page) { 
        return true; 
       } 
       return false; 
      } 
     }); 

    } 

    private class MyPagerAdapter extends FragmentPagerAdapter { 

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

     @Override 
     public Fragment getItem(int pos) { 
      switch(pos) { 

       case 0: return FirstFragment.newInstance("FirstFragment, Instance 1"); 
       case 1: return SecondFragment.newInstance("SecondFragment, Instance 1"); 
       case 2: return ThirdFragment.newInstance("ThirdFragment, Instance 1"); 
       default: return ThirdFragment.newInstance("ThirdFragment, Default"); 
      } 
     } 

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

    } 
} 

MainActivity.java私の手順です。

activity_main.xml

<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/viewPager" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"/> 

third_frag.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@android:color/holo_red_light" > 

<TextView 
    android:id="@+id/tvFragThird" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:textSize="26dp" 
    android:text="TextView" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:id="@+id/printButton" 
     android:text="Next"/> 

</RelativeLayout> 

ThirdFragment.java

public class ThirdFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.third_frag, container, false); 

     TextView tv = (TextView) v.findViewById(R.id.tvFragThird); 
     tv.setText(getArguments().getString("msg")); 
     Button button=(Button)v.findViewById(R.id.printButton); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       FourthFragment fourthFragment=new FourthFragment(); 
       Bundle bundle=new Bundle(); 
       bundle.putInt(String.valueOf(FirstFragment.newInstance("Terance")),1); 
       fourthFragment.setArguments(bundle); 

       FragmentManager fragmentManager=getFragmentManager(); 

       FragmentTransaction transaction = fragmentManager.beginTransaction(); 
       transaction.replace(R.id.viewPager, fourthFragment); 
       transaction.addToBackStack(null); 
       transaction.commit(); 
      } 
     }); 

     return v; 
    } 

    public static ThirdFragment newInstance(String text) { 

     ThirdFragment f = new ThirdFragment(); 
     Bundle b = new Bundle(); 
     b.putString("msg", text); 

     f.setArguments(b); 

     return f; 
    } 

} 

fourth_frag.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/holo_blue_dark"> 

    <TextView 
     android:id="@+id/tvFragFourth" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:textSize="26dp" 
     android:text="TextView" /> 

</RelativeLayout> 

FourthFragment.java

public class FourthFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fourth_frag, container, false); 

     TextView tv = (TextView) v.findViewById(R.id.tvFragFourth); 
     tv.setText("Fourth Fragment"); 

     return v; 
    } 

    public static FourthFragment newInstance(String text) { 

     text="Terance"; 
     FourthFragment f = new FourthFragment(); 
     Bundle b = new Bundle(); 
     b.putString("msg", text); 

     f.setArguments(b); 

     return f; 
    } 

} 

あり4つの断片のクラスがあると私は目的のために使用されている2つだけを記載しています。これを左または右にスワイプすることはできません。それから私は4番目の断片に行くためにボタンを使います。しかし、それは動作していません。

は、このことについてどんな考えをお持ちですか?

ありがとうございます。

+0

ビューページに4番目のフラグメントだけをスクロールするように指示しないと、ビューページで4個のフラグメントが読み込まれます。 – danypata

+0

@danypata:それはいくつかの条件をチェックするために停止する必要があります、このアプリでは目的を持っています。 – Barrier

+0

ボタンのクリックで子フラグメントマネージャーを試してください – Abhishek

答えて

2

あなたは間違っているR.id.viewPagerで4番目のフラグメントを置き換えています。

ViewPager内のフラグメントを変更するには、ViewPagerメソッドsetcurrentItem(id)を呼び出す必要があります。これは、View Pagerを使用しているため、望ましいナビゲーション方法です。

public void setCurrentItem(int which) { 
    if(viewpager != null && which >= 0 && which <= 4) { 
     viewpager.setCurrentItem(which); 
    } 
} 

コールThirdFragment.javaからこの方法:あなたの活動に

は、法作る第四アダプタのページャアダプタでは、上記のコードで

button.setOnClickListener(new View.OnClickListener() { 
    if(getActivity() != null) { 
     getActivity().setCurrentItem(3); // fourth fragment index is 3 
    } 
} 
+0

こんにちは、私のクラスは、正しい活動を見つけることができません。 IDEは 'メソッドを解決できません..... ' – Barrier

+1

このメソッドは' ViewPager'クラスに属しています... 'pager.setCurrentItem(3)' – Kushal

0

ページの正しい位置を与えるために、ViewpagerのonPageSelected()メソッドをオーバーライドする方がよい。

public void onPageSelected(int position) { 
     //set your page here which gives current page position 
    } 
+0

こんにちは、提供されたサンプルは有益ではありません。より有益なサンプルを提供してください。 – Barrier

+0

問題を詳しく説明できますか? –

2

私はあなたが4つの断片を持っていると思うが、何をMyPagerAdapterでやったことは、あなただけあなたが第四の第三の断片からナビゲートすることができない理由であるスイッチケース3の断片を追加

@Override 
    public Fragment getItem(int pos) { 
     switch(pos) { 

      case 0: return FirstFragment.newInstance("FirstFragment, Instance 1"); 
      case 1: return SecondFragment.newInstance("SecondFragment, Instance 1"); 
      case 2: return ThirdFragment.newInstance("ThirdFragment, Instance 1"); 
      default: return ThirdFragment.newInstance("ThirdFragment, Default"); 
     } 
    } 

ですフラグメント、私はあなたがするべきだと思います

@Override 
    public Fragment getItem(int pos) { 
     switch(pos) { 

      case 0: return FirstFragment.newInstance("FirstFragment, Instance 1"); 
      case 1: return SecondFragment.newInstance("SecondFragment, Instance 1"); 
      case 2: return ThirdFragment.newInstance("ThirdFragment, Instance 1"); 
      case 3: return FourthFragment.newInstance("FourthFragment, Instance 1"); 
      default: return ThirdFragment.newInstance("ThirdFragment, Default"); 
     } 
    } 
0
private class MyPagerAdapter extends FragmentPagerAdapter { 

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

    @Override 
    public Fragment getItem(int pos) { 
     switch(pos) { 

      case 0: return FirstFragment.newInstance("FirstFragment, Instance 1"); 
      case 1: return SecondFragment.newInstance("SecondFragment, Instance 1"); 
      case 2: return ThirdFragment.newInstance("ThirdFragment, Instance 1"); 
      default: return ThirdFragment.newInstance("ThirdFragment, Default"); 
     } 
    } 

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

} 

を、また、定義された場合すなわち、

case 3: return FourthFragment.newInstance("FourthFragment, Instance 1"); 

そして、第二の問題は、[...]ボタンをクリックすることにより、あなたはこのコードを使用してFourthFragmentに行くことができないということであるandroid.support.v4.view.ViewPagerで置き換えるフラグメントの代わりに

Button button=(Button)v.findViewById(R.id.printButton); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      FourthFragment fourthFragment=new FourthFragment(); 
      Bundle bundle=new Bundle(); 
      bundle.putInt(String.valueOf(FirstFragment.newInstance("Terance")),1); 
      fourthFragment.setArguments(bundle); 

      FragmentManager fragmentManager=getFragmentManager(); 

      FragmentTransaction transaction = fragmentManager.beginTransaction(); 
      transaction.replace(R.id.viewPager, fourthFragment); 
      transaction.addToBackStack(null); 
      transaction.commit(); 
     } 
    }); 

transaction.replace(R.id.viewPager, fourthFragment); 

FrameLayoutを使用してください。

transaction.replace(R.id.framelayout, fourthFragment); 
関連する問題