从活动android返回片段的值

时间:2014-12-30 09:51:16

标签: android-activity android-fragments

我有片段(F)调用活动(A)。按下活动(A)中的按钮(B),活动必须将选定的arraylist值返回到片段(F)并完成活动(A)......这可能吗?

我知道您可以在Activity中发送意图数据:

Bundle bundle = new Bundle();
bundle.putString("key", "value");
// set Fragmentclass Arguments
Fragmentclass fragmentobj = new Fragmentclass();
fragmentobj.setArguments(bundle);
在Fragment onCreateView方法中

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    String strtext = getArguments().getString("key");    
    return inflater.inflate(R.layout.fragment, container, false);
}

但这适用于调用不使用相同片段的新片段。

我的问题:调用Activity是否可以将值返回给调用者片段?

public class HomeFragment extends Fragment{
    Button attachment;
    String strtext = "check";   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setHasOptionsMenu(true);
    }   

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.home_fragment, null);     
        attachment = (Button) rootView
                .findViewById(R.id.btn_activity);       
        Toast.makeText(getActivity(),
                "Key= " + strtext,
                Toast.LENGTH_LONG).show();
        attachment.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                Intent myIntent = new Intent(getActivity(), AndroidCustomGalleryActivity.class);
                getActivity().startActivityForResult(myIntent,999); 

            }
        });

        return rootView;

    }   

    public void onActivityResult(int requestCode, int resultCode, Intent data) {        

        if(requestCode == 999){
        strtext = getArguments().getString("key"); 

        Toast.makeText(getActivity(),
                "Key= " + strtext,
                Toast.LENGTH_LONG).show();
        }
    }
}

在被叫活动中

Bundle bundle = new Bundle();
bundle.putString("key", "value");
HomeFragment fragmentobj = new HomeFragment();
fragmentobj.setArguments(bundle);
finish();

1 个答案:

答案 0 :(得分:1)

在你的片段(F)中调用startActivityForResult()方法来启动活动A,然后覆盖片段中的onActivityResult()方法。

因此,当活动A结束时,您可以在onActivityResult()方法中获取结果包。

修改

在你的片段onClick()中调用这样的活动

Intent myIintent=new Intent(getActivity(), AndroidCustomGalleryActivity.class);
    startActivityForResult(myIintent, 999);

在你的活动中

Intent intent = getIntent();
    Bundle bundle = new Bundle();
    bundle.putString("key", "value");
    intent.putExtras(bundle);
    setResult(RESULT_OK, intent);
    finish();

现在,您将获得片段的onActivityResult()方法的结果。

<强> EDIT2

在你的片段onActivityResult()方法中,你必须得到像这样的数据......

Bundle extras = data.getExtras();
    strtext =   extras.getString("key");