2015-06-18 9 views
5

Ich habe die folgende XML-Datei ersetzen. In eines des Fragmente versuche ich ein neues Fragment mit diesem Code zu starten:Wie Ansicht Pager Ansicht komplett mit einem neuen Fragmente in Android

FragmentTransaction trans = getFragmentManager() 
       .beginTransaction(); 
     trans.replace(R.id.pager, new SubscriptionFragment()); 
     trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
     trans.addToBackStack(null); 

     trans.commit(); 

ich in der Lage bin, um erfolgreich das bestehende Fragment des ViewPager zu ersetzen, aber es ist nicht meine Absicht dienen, was ich Es ist wünschenswert, das vorhandene Fragment, das bereits im viewPager vorhanden ist, nicht zu ersetzen, sondern den Ansichtspager selbst aus der Ansicht zu entfernen und ein neues Fragment zu starten, so dass die obersten Registerkarten nicht mehr sichtbar sind und ViewPager von der Ansicht verschwindet. Dies funktioniert, wenn ich eine neue Aktivität mit Absicht starte. aber funktioniert nicht für ein Fragment.

Edited:

public class MainActivity extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout, new MainFragment()).commit(); 
    } 


} 

MainFragment:

public class MainFragment extends Fragment { 

    FragmentPagerAdapter adapterViewPager; 
    ViewPager viewPager; 
    String title[] = {"Services", "You", "History"}; 

    // TODO: Rename and change types and number of parameters 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     /* Inflate the layout for this fragment */ 
     View view = inflater.inflate(R.layout.fragment_view_pager, container, false); 




     /*************************************/ 
     //CALLING HISTORY API 

     // loadSubscriptions(); 

     return view; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     ViewPagerAdapter mAdapter = new ViewPagerAdapter(getFragmentManager()); 

     ViewPager mPager = (ViewPager) getView().findViewById(R.id.pager); 
     mPager.setAdapter(mAdapter); 
    } 

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

     @Override 
     public Fragment getItem(int num) { 
      if (num == 0) { 
       return new ServicesFragment(); 
      } else { 
       return new HistoryFragment(); 
      } 
     } 

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

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/frame_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

</FrameLayout> 

fragment_view_pager.xml

<?xml version="1.0" encoding="utf-8"?> 

<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 

    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

In servicefragment: Ich Eröffnungstag neues Fragment mit:

physiotherapyView.setOnClickListener(new View.OnClickListener() { 





@Override 

     public void onClick(View view) { 

      FragmentTransaction trans = getFragmentManager() 
        .beginTransaction(); 
      /* 
      * IMPORTANT: We use the "root frame" defined in 
      * "root_fragment.xml" as the reference to replace fragment 
      */ 
      trans.replace(R.id.pager, new SubscriptionFragment()); 

      /* 
      * IMPORTANT: The following lines allow us to add the fragment 
      * to the stack and return to it later, by pressing back 
      */ 
      trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
      trans.addToBackStack(null); 

      trans.commit(); 

     } 

    }); 
+0

ist der ViewPager innen Fragment auch? –

+0

@ItzikSamara nein, es ist eine Aktivität! – user3458008

Antwort

0

nicht fügen, ViewPager Innen FrameLayout.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/frame_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

</FrameLayout> 

hinzufügen Fragment in diesem Layout, das ViewPager enthält, und fügen Sie FragmentTransaction in Ihrem mainActivity

public class MainActivity extends FragmentActivity { 


     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout, new MainFragment()).commit(); 

Hier enthält MainFragment ViewPager, Jetzt können Sie Ihre viewPager von gesamtem Layout mit FragmentTransaction ersetzen

+0

Ich habe meine Frage entsprechend aktualisiert – user3458008

+0

Ich habe Sie schon, bitte überprüfen Sie, ob die Antwort geeignet ist oder nicht – Abhishek

+0

Ich habe nicht bekommen, was Sie versuchen zu sagen. Du willst sagen, dass ich eine neue Klasse erstellen und FragmentActivity erweitern muss. Und setzen Sie den viewPager in ein Fragment statt in eine Aktivität? – user3458008

1

Unten finden Sie den vollständigen Code zum Hinzufügen oder Entfernen von Fragmenten zu oder von einem View-Pager. Da dies nur eine Demonstration ist habe ich nur eine textView verwendet und jedes Fragment hinzugefügt haben eine zufällige Farbe.Nach einem Klick auf eine Schaltfläche können Sie so viele Fragmente hinzufügen, wie Sie wollen.Nach dem Klicken auf die Seite können Sie es einfach aus dem View Pager entfernen Sie können in einem View Pager von einer Seite zur anderen wechseln, indem Sie nach rechts oder links wischen.

MainActivity.java

import android.graphics.Color; 
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.FragmentStatePagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.View; 
import android.widget.Button; 
import java.util.ArrayList; 
import java.util.Random; 

public class MainActivity extends FragmentActivity { 

    private MyPagerAdapter mpg; 
    private ArrayList<MyFragment> fragmentlist = new ArrayList<>(); 
    public FragmentManager fmr = getSupportFragmentManager(); 

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

     final ViewPager pager = (ViewPager) findViewById(R.id.viewPager); 
     mpg = new MyPagerAdapter(fmr,fragmentlist); 
     pager.setAdapter(mpg); 

     for (int q = 0; q < 5; q++) { 
      int r = new Random().nextInt(100) + 155; 
      int g = new Random().nextInt(100) + 155; 
      int b = new Random().nextInt(100) + 155; 
      fragmentlist.add(MyFragment.newInstance(q, "Page number: " + (q + 1), Color.rgb(r, g, b))); 
      mpg.notifyDataSetChanged(); 
     } 

     Button B1 = (Button) findViewById(R.id.button); 
     B1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       int r = new Random().nextInt(100) + 155; 
       int g = new Random().nextInt(100) + 155; 
       int b = new Random().nextInt(100) + 155; 
       int count = mpg.getCount(); 
       fragmentlist.add(MyFragment.newInstance(count, "Page number: " + (count+1), Color.rgb(r, g, b))); 
       mpg.notifyDataSetChanged(); 

      } 
     }); 
    } 

    public void delete(int pos) { 

     int i = 0; 
     while (i <= fragmentlist.size()) { 
      if (pos == fragmentlist.get(i).getPosition()) break; 
      i++; 

     } 

     fragmentlist.remove(i); 
     mpg.notifyDataSetChanged(); 
    } 

    public class MyPagerAdapter extends FragmentStatePagerAdapter { 

     private ArrayList<MyFragment> fragmentList; 
     public MyPagerAdapter(FragmentManager fm, ArrayList<MyFragment> f) { 
      super(fm); 
      this.fragmentList = f; 
     } 

     @Override 
     public Fragment getItem(int pos) { 
      return fragmentlist.get(pos); 
     } 

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

     @Override 
     public int getItemPosition(Object object) { 
      return POSITION_NONE; 
     } 
    } 
} 

MyFragment.java

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.FrameLayout; 
import android.widget.TextView; 

import java.util.List; 

public class MyFragment extends Fragment { 

    int pos; 

    @Override 
    public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.f_1, container, false); 
     pos = getArguments().getInt("num"); 
     v.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Log.v("MainActivity", "Deleting at pos - " + pos); 
       MainActivity activity = (MainActivity) getActivity(); 
       activity.delete(pos); 
      } 
     }); 

     TextView tv = (TextView) v.findViewById(R.id.tvFragFirst); 
     FrameLayout fl = (FrameLayout) v.findViewById(R.id.frame_layout); 
     tv.setText(getArguments().getString("msg")); 
     fl.setBackgroundColor(getArguments().getInt("colour")); 
     return v; 
    } 

    public int getPosition() { 
     return pos; 
    } 

    public static MyFragment newInstance(int num,String text,int clr) { 

     MyFragment f = new MyFragment(); 
     Bundle b = new Bundle(); 
     b.putString("msg", text); 
     b.putInt("colour", clr); 
     b.putInt("num",num); 
     f.setArguments(b); 
     return f; 
    } 
} 

Und die xml.files,

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.shakthivels.assingment10.MainActivity" 
    android:id="@+id/r_v" 
    > 

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

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="ADD a fragment" 
     android:id="@+id/button" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" /> 

</RelativeLayout> 

f_1.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:id="@+id/av" 
    > 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:id="@+id/frame_layout"> 

     <TextView 
      android:id="@+id/tvFragFirst" 
      android:layout_width="203dp" 
      android:layout_height="127dp" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:textSize="26sp" 
      android:text="TextView" 
      android:layout_gravity="center" 
      android:textColor="#000000" /> 

    </FrameLayout> 
</RelativeLayout> 

Already Existing Fragment1 Newly added Fragment to the view Pager2

Verwandte Themen