2014-09-21 68 views
1

我有一個活動中的片段,該片段包含viewpager,這是代碼:從子片段通知裏面ViewPager他的父事件

public class RepliesContainerFragment extends Fragment { 

    @InjectView(R.id.viewPager) 
    ViewPager pager; 
    private PagerAdapter adapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ReplyActivity replyActivity = (ReplyActivity) getActivity(); 
     List<Replie> replies = getArguments().getParcelableArrayList("replies"); 
     adapter = new PagerAdapter(replyActivity.getSupportFragmentManager(), replies); 
     setActionBar(); 
    } 

    private void setActionBar() { 
     getActivity().getActionBar().setDisplayHomeAsUpEnabled(false); 
     getActivity().getActionBar().setIcon(getResources().getDrawable(R.drawable.ic_back)); 
     getActivity().getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActivity().getActionBar().setTitle("Respuestas"); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 
     View view = inflater.inflate(R.layout.work_containter_replies, container, false); 
     ButterKnife.inject(this, view); 
     pager.setAdapter(adapter); 
     return view; 
    } 
} 

適配器我有實例化這樣一些片段內:

public class ReplyFragment extends Fragment { 

    @InjectView(R.id.tvQuestion) 
    TextView tvQuestion; 
    @InjectView(R.id.frameContainter) 
    FrameLayout replyContainer; 
    private ReplyView replyView; 
    private String question; 
    private String currentReplie; 
    private int replieType; 
    private int questionId; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     replieType = getArguments().getInt("replyType"); 
     question = getArguments().getString("question"); 
     questionId = getArguments().getInt("questionId"); 
     currentReplie = getArguments().getString("currentReplie"); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 
     View view = inflater.inflate(R.layout.work_reply_fragment, container, false); 
     ButterKnife.inject(this, view); 
     initQuestionText(); 
     return view; 
    } 

    private void persistReply() { 
     ReplyActivity replyActivity = (ReplyActivity) getActivity(); 
     if (replyActivity != null) { 
      //DO SOMETHING 
      //Notify to adapter from here 
      } 
     } 
    } 
} 

正如你所看到的,我想通知我RepliesContainerFragment和他的一些事件發生,做一個動作裏面適配器..

我該怎麼辦這是什麼? 與廣播接收器,回調(接口)..?我不知道。

回答

1

這個非常簡單的解決方案是將偵聽器實例從您的父級片段傳遞給子片段。您必須創建一個監聽器接口,在您的父代片段中創建它的一個實例,並將該實例傳遞給您的所有子代片段。

順便說一下在官方教程中有關於這個問題的topic

希望這會有所幫助。

0

我認爲這是比較容易:

private void persistReply() { 
     ReplyActivity replyActivity = (ReplyActivity) getActivity(); 
     if (replyActivity != null) { 
      //DO SOMETHING 
      RepliesContainerFragment frag = ((RepliesContainerFragment)this.getParentFragment()); 
      frag.getAdapter().notifyDataSetChanged(); 
      } 
     } 
} 

,使吸氣setter方法adapter

+0

我嘗試過,但在這一點上getparentfragment爲空。 – colymore 2014-09-22 05:57:06

+0

對不起,你應該在你的問題中提及! – mmlooloo 2014-09-22 06:00:11

+1

你真是抱歉 – colymore 2014-09-22 06:01:07