2017-01-25 17 views
0

現時点では、私はリストページを膨らませるビューページを持つアクティビティを持っています。 ユーザーがリストビュー内の項目をクリックすると、新しい断片が膨らみます。Android - 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); 

    } 
} 

私はリストビュー内の項目をクリックすると、アクティビティを開くために管理している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; 

       } 

      } 
     }); 
    } 
} 

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

layout.activity_test、私は現在の活動を、新しい断片で膨らませたいと思っています。リストビュー

+0

ここで、フラグメントを置き換えますか? 'ViewPager'の中に? – K2evil

+0

はい、 'ViewPager'の中に –

答えて

1

これは最善で最短の解決策ではありませんが、わかりやすいことがわかりました。 Fragmentをコンテナとして作成し、ViewPagerに追加することができます。その後、内部の断片を置き換えます。

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; 
    } 
} 
あなたの活動で

:あなたのTestFragment

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

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

} 

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; 

      } 

     } 
    }); 

私はこのコードをテストしてエラーがあるかどうかを確認していませんでしたが、いくつかの変更を加えれば、目的に合ったものにすることができます。

+0

あなたが私をそこに失ったのを待ってください。私のフラグメントコンテナは、ViewHolderを保持する 'activity_test'です。上のコードを見てください。あなたが参照している 'fragment_container.xml'とは何ですか? 'new TestFragment())の' ContainerFragment.java'にもエラーがあります。 '(間違った第2引数型)。私のようなコードを編集してください。私の主なアクティビティは 'Test.java'です。私の主なアクティビティは 'activity_test.xml'です(これはビュー所有者を保持します) –

+0

@ H.Brooks Ok ... look ...あなたは 'ViewPager' 。あなたは 'ViewPager'に' ListFragment'を表示したい、ユーザーが項目をクリックしたときに、 'ViewPage'で別のフラグメントを置き換えたいのです...そうですか? – K2evil

+0

'ViewPager'に' TestFragment'を追加するのではなく、 'ContainerFragment'を' ContainerFragment'に追加して 'TestFragment'を' ContainerFragment'に追加してください。ユーザが項目をクリックすると、 'SecondFragment'を' ContainerFragment'の 'TestFragment'に置き換えることができます。 – K2evil

関連する問題