如何将字符串数据从活动传递到片段?

时间:2014-08-13 13:51:22

标签: android android-fragments fragment

我想将字符串值从activity传递给fragment。为此,我使用bundle来传输字符串值。

投入活动 传递字符串值: -

           Bundle bundle = new Bundle();
            bundle.putString("Value", resultp.get(CurrentProjectActivity.VALUE));
            Log.d(TAG, "Value  ::: " + resultp.get(CurrentProjectActivity.VALUE));
            // set Fragmentclass Arguments
            AmenetiesFragment fragobj = new AmenetiesFragment();
            fragobj.setArguments(bundle);

在日志中我也获得了“价值”。

在碎片中获得价值(不工作)。

     @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.activity_listview, container, false);
    Bundle bundle = this.getArguments();
    Log.d(TAG, "Value's value:)  ::: " + bundle);
    String strtext = bundle.getString("Value");
    return rootView;
}

在日志中我为BUNDLE获取NULL值。请帮我解决这个问题。提前谢谢。

5 个答案:

答案 0 :(得分:10)

我建议您按照link1this进行操作。你应该使用接口。查看here

Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);

并在Frament任务中

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

答案 1 :(得分:4)

假设您要将String数据从Activity发送到Fragment

在Fragment.java文件中添加以下代码,

public static String name= null;

public void setName(String string){
name = string;
}

在要从中发送String的MainActivity.java中添加以下代码

String stringYouWantToSend;

Fragment fragment =  new Fragment();
fragment.setName(stringYouWantToSend);   

答案 2 :(得分:0)

在片段中需要的对象活动中首先公开。 然后就可以像((ACtivityName)getActivity()).objectName;一样使用 我希望它有所帮助。这不是将数据传递到片段的最佳方式。

还有其他一些方法。 创建片段类的构造函数并传递它并保存在片段中:

    public MyFragment(String data){
       this.data = data;
    }

你也可以使用@james答案。

编辑: -

第一种方式

private class MyFeagment extends Fragment {
    private String data;
    private Object myObject;

    public MyFeagment(String data, Object anyObject) {
        this.data = data;
        this.myObject = myObject;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        Log.i("My Fragment", "data :: " + data + " and myObject :"
                + myObject);
        return super.onCreateView(inflater, container, savedInstanceState);
    }
}

让我们说这是你的framgnet。 并将此代码放入您的活动

FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.add(R.id.fragment_container, new MyFeagment("My Data",
            "data"));
    transaction.commit();

答案 3 :(得分:0)

第一次运行应用时,savedInstance变量将为空, 它只在调用onSaveInstanceState方法时被填充,这通常在您旋转屏幕时发生,然后将填充savedInstance变量。试试这个:

if(savedInstance != null){
  Log.d(TAG, "There's is something");
}else{
  Log.d(TAG, "Nothing in there");
}

首次在logcat中,您会看到第一条消息,尝试转动您的设备,其他消息将会显示。

正如@james所说,推荐的方法是使用接口,或者有一个字段类,但这会增加耦合并破坏片段的整个点。

答案 4 :(得分:0)

最简单的方法,但不推荐

您可以从片段访问活动数据:

的活动:

public class MyActivity extends Activity {

    private String myString = "hello";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        ...
    }

    public String getMyData() {
        return myString;
    }
}

片段:

public class MyFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        MyActivity activity = (MyActivity) getActivity();
        String myDataFromActivity = activity.getMyData();
        return view;
    }
}