2016-08-25 10 views
-2

メインアクティビティに1つのビューポートがあります。ビューページ内には、2つのフラグメントAとBがあります。フラグメントAには、ニューストピックのリストビューがあります。そして、リストビュー上の各項目をクリックすると、フラグメントBにニュースの内容が表示されます。 リストビューアダプターの各項目をクリックするたびに、私の考えはsetcurrentitem()です。しかし、私はそれが動作しないことがわかります。フラグメントBは、フラグメントAのリストビューの2番目のニュースのコンテンツを表示しません。つまり、ビューページがフラグメントBのコンテンツを更新しないことを意味します。緊急:2つのフラグメントを持つビューページからフラグメントを1つ更新します。

誰かがこの問題をどのように解決できるか教えていただけますか?

ありがとうございます。

+2

コードを投稿できますか? – pawelo

+0

フラグメントAのアイテムに触れることでフラグメントBを更新する考えはありますか?私はgoogleでたくさんの検索をしましたが、うまくいきません。 Plsヘルプ – user6478182

+0

私の答えを見て – pawelo

答えて

0

外部インターフェイスを使用して、アクティビティとフラグメント間でデータを渡すことができます。フラグメント間で直接話すべきではなく、アクティビティをプロキシとして使用するべきです。以下の例:

MainActivity.java

public class MainActivity extends AppCompatActivity implements InteractionInterface { 

    private ViewPager viewPager; 

    private MyAdapter adapter; 

    @Override 
    public void onCreate(Bundle instance) { 
     super.onCreate(instance); 
     setContentView(R.layout.activity_main); 
     viewPager = (ViewPager) findViewById(R.id.viewPager); 
     adapter = new MyAdapter(getSupportFragmentManager()); 
     viewPager.setAdapter(adapter); 
    } 

    private class MyAdapter extends FragmentStatePagerAdapter { 

     private FragmentA fragmentA; 

     private FragmentB fragmentB; 

     public MyAdapter(FragmentManager fm) { 
      super(fm); 
      fragmentA = new FragmentA(); 
      fragmentB = new FragmentB(); 
     } 

     @Override 
      public Fragment getItem(int position) { 
      return position == 0 ? fragmentA : fragmentB; 
     } 

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

    @Override 
    public void onClick() { 
     // this comes from InteractionInterface 
     if(adapter.fragmentB.isAdded()) { 
      adapter.fragmentB.doSomething("yeah!!"); 
     } 
    } 

} 

FragmentA.java

public class FragmentA extends Fragment { 

    private Button button; 

    private InteractionInterface interface = null; 

    @Override 
    public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) { 
     final View rootView = inflater.inflate(R.layout.fragment_a, container, false); 
     button.setOnClickListener(new OnClickListener() { 
      public void onClick(final View v) { 
       if(interface != null) { 
        // you can modify this interface to pass some data 
        interface.onClick(); 
       } 
      } 
     }); 
     return rootView; 
    } 

    public void onAttach(Activity a) { 
     super.onAttach(a); 
     if (a instanceof InteractionInterface) { 
      interface = (InteractionInterface) a; 
     } 
    } 

    public void onDetach() { 
     super.onDetach(); 
     interface = null; 
    } 

} 

FragmentB.java

public class FragmentB extends Fragment { 

    ... 

    public void doSomething(String something) { 
     // do stuff here 
    } 

} 

InteractionInterface.java

public interface InteractionInterface { 
    void onClick(); 
} 
+0

それは良いよりも動作します。正直言って、ありがとう。私はこの問題を数日間混乱させて、あなたは私の一日を作りました。良い一日の男を持って.. – user6478182

+0

あなたは歓迎です:)あなたがそれを好きなら私の答えを受け入れてください – pawelo

関連する問題