2017-01-25 7 views
0

Im Moment habe ich eine Aktivität mit einem Viewpager, der ein Listfragment aufbläht. Wenn ein Benutzer auf ein Element in der Listenansicht klickt, möchte ich ein neues Fragment aufblasen.Android - Fragment von ArrayAdapter

Test.java

public class Test extends AppCompatActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 
     final Toolbar toolbar; 
     toolbar = (Toolbar) findViewById(R.id.app_bar); 
     setSupportActionBar(toolbar); 


     ViewPager vp = (ViewPager) findViewById(R.id.n_Viewpager); 
     this.addPages(vp); 

    } 

    //ADD ALL PAGES 
    private void addPages(ViewPager pager) { 
     MyFragPagerAdapter adapter = new MyFragPagerAdapter(getSupportFragmentManager()); 
     adapter.addPage(new TestFragment()); 

     //SET ADAPTER TO PAGER 
     pager.setAdapter(adapter); 

    } 
} 

layout.activity_test

<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" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:context="tutorial.com.ScratchGolfer.Test"> 

    <RelativeLayout 
     android:id="@+id/nav" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/appbarr" 
      > 

      <include 
       android:id="@+id/app_bar" 
       layout="@layout/app_bar" /> 


     </android.support.design.widget.AppBarLayout> 

      <android.support.v4.view.ViewPager 
       android:id="@+id/n_Viewpager" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_below="@+id/appbarr" 
       app:layout_behavior="android.support.design.widget.AppBarLayout$ScrollingViewBehavior" 
       /> 

    </RelativeLayout> 


</RelativeLayout> 

TestFragment.java

public class TestFragment extends ListFragment { 

    //Setting the name of each event 
    String[] options = {"1", "2", "3", "4", "5", "6", "7"}; 
    ArrayAdapter<String> adapter; 


    //Inflating the view with the fragment 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     adapter = new ArrayAdapter<>(getActivity(), R.layout.listitem, R.id.textview, options); 

     setListAdapter(adapter); 
     return super.onCreateView(inflater, container, savedInstanceState); 

    } 


    //Click events 
    @Override 
    public void onStart() { 
     super.onStart(); 

     getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> adapterView, View v, int pos, long l) { 
       switch (pos) { 
        case 0: 
         Intent intent0 = new Intent(v.getContext(), NewActivity.class); 
         v.getContext().startActivity(intent0); 
         break; 
        case 1: 

         break; 

       } 

      } 
     }); 
    } 
} 

ich es geschafft haben, eine Aktivität zu öffnen, wenn ich einen Artikel in der Listenansicht klicken, aber ich würde gerne die aktuelle Aktivität mit einem neuen Fragment aufblasen, je nachdem, auf welches Objekt geklickt wurde listview

+0

Wo möchten Sie das Fragment ersetzen? im 'ViewPager'? – K2evil

+0

ja, in der 'ViewPager' –

Antwort

1

Es ist nicht die beste und kürzeste Lösung, aber ich fand es verständlicher. Sie können einen als Container erstellen und ihn zu Ihrer ViewPager hinzufügen. Dann ersetzen Sie die Fragmente darin.

fragment_container.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/fragment_container_root_view"> 
</LinearLayout> 

ContainerFragment.Java

public class ContainerFragment extends Fragment { 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_container, container, false); 
     getChildFragmentManager().beginTransaction().replace(R.id.fragment_container_root_view, new TestFragment()).commit(); 
     return view; 
    } 
} 

In Sie Aktivität:

private void addPages(ViewPager pager) { 
    MyFragPagerAdapter adapter = new MyFragPagerAdapter(getSupportFragmentManager()); 
    adapter.addPage(new ContainerFragment()); 

    //SET ADAPTER TO PAGER 
    pager.setAdapter(adapter); 

} 

In Ihrem TestFragment:

getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> adapterView, View v, int pos, long l) { 
      switch (pos) { 
       case 0: 
        getParentFragment().getChildFragmentManager().beginTransaction().replace(R.id.fragment_container_root_view, new SecondFragment()).addToBackStack("").commit(); 

        break; 
       case 1: 

        break; 

      } 

     } 
    }); 

Ich habe diesen Code nicht getestet, um zu sehen, ob es einen Fehler hat oder nicht, aber mit einigen Änderungen, können Sie erreichen, was Sie wollen.

+0

Ok warten Sie haben mich dort verloren. Mein Fragmentcontainer ist 'activity_test', er enthält einen ViewHolder, schau dir meinen obigen Code an. Worauf bezieht sich die fragment_container.xml? Ich bekomme auch einen Fehler bei 'ContainerFragment.java' unter' new TestFragment()). Commit(); '(falscher zweiter Argumenttyp). Können Sie Ihren Code bitte so bearbeiten, dass er meinem ähnelt? Meine Hauptaktivität ist 'Test.java' meine Hauptaktivität ist 'activity_test.xml' (dies hält den Viewholder) –

+0

@ H.Brooks Ok ... schau ... Du hast eine 'Aktivität' mit einem' ViewPager' darin . Sie möchten ein 'ListFragment' in' ViewPager' anzeigen und wenn ein Benutzer auf ein Element geklickt hat, möchten Sie ein anderes Fragment in 'ViewPage' ersetzen ... Stimmt das? – K2evil

+0

Nun fügen Sie '' '' '' '' '' '' '' '' '''' '''' '' '''' '' ''' '' '' '' '' '' '' '' '' ''' '''' '''' '' '' '''' '' FRAGMENT '' hinzu. Wenn ein Benutzer nun auf ein Element klickt, können Sie "SecondFragment" durch "TestFragment" in "ContainerFragment" ersetzen. – K2evil

Verwandte Themen