紧急:从viewpager更新1片段有两个片段

问题描述:

我在主要活动中有一个viewpager。在viewpager里面,我有2个片段A和B.片段A有一个新闻主题的列表视图。当你点击listview中的每个项目时,新闻的内容就会显示在片段B上。 我的想法是在每次点击每个项目时在列表视图适配器中设置当前项目()。但我发现它不起作用。片段B没有在片段A的listview上显示第二条新闻的内容。这意味着viewpager不会更新片段B的内容紧急:从viewpager更新1片段有两个片段

有人可以告诉我如何解决这个问题吗?

在此先感谢。

+2

你能发表一些代码吗? – pawelo

+0

您是否有任何想法通过触摸片段A中的项目来更新片段B?我在谷歌搜索了很多,但它不起作用。请帮助 – user6478182

+0

看看我的回答 – pawelo

您可以使用外部接口在活动和片段之间传递数据。您不应该直接在片段之间进行交谈,请使用Activity作为代理。下面的实施例:

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