-1

我对 android 开发人员很陌生,我通过捆绑从活动获取数据到片段,但捆绑数据是通过菜单选项更新的,但片段没有获取更新的数据。

//调用片段....

        FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction();
        final Bundle bundle=new Bundle();
        String sid=mStudents.get(selectedno).getStudentId();
        bundle.putString("studentidbundle", sid);
        // Toast.makeText(this, ""+sid, Toast.LENGTH_SHORT).show();
        ProgressFrame progressFrame=new  ProgressFrame();
        progressFrame.setArguments(bundle);
        fragmentTransaction.addToBackStack("FrameTransaction");
        fragmentTransaction.detach(progressFrame);
        fragmentTransaction.attach(progressFrame);
        fragmentTransaction.replace(R.id.fraame1main, progressFrame);
        fragmentTransaction.commit();

//从activity获取数据到fragment

        sid = getArguments().getString("studentidbundle");
4

2 回答 2

0

你可以这样做

public static ProgressFrame getInstance(string id){
        ProgressFrame progressFrame=new  ProgressFrame();
        Bundle bundle=new Bundle();
        bundle.putString("studentidbundle", id);
        progressFrame.setArguments(bundle);
        return fragment ;
}

现在您可以通过这种方式使用 beginTransaction :

fragmentTransaction.replace(R.id.fraame1main, ProgressFrame.getInstance(sid));
于 2019-12-13T10:47:57.117 回答
0

在Activity类中创建接口

  • 活动代码
private FragmentRefresh fragmentRefresh;

public interface FragmentRefresh{
    void refresh(String data);
}

public void setFragmentListener(FragmentRefresh fr){
    this.fragmentRefresh = fr;
}

// call interface function where ever you required
    fragmentRefresh.refresh(data);

在片段中实现该接口

  • 片段代码
((YourActivity)getActivity).setFragmentListener(new FragmentRefresh(){
    @Override
    public void refresh(String data){
        //use this data
    }
});

也许这段代码会对你有所帮助。

于 2019-12-13T11:06:45.227 回答