繁体   English   中英

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

[英]how to pass string data from activity to fragment?

我想将字符串值从活动传递到片段。 为此,我使用包来传输字符串值。

PUT STRING ACTIVITY传递字符串值:-

           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值。 请帮助我解决此问题。 提前致谢。

我建议您遵循此link1this 您应该使用界面。 在这里检查

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);
}

假设您要将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);   

在活动中首先公开您需要片段的对象。 那么您可以使用((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();

第一次运行应用程序时,savedInstance变量将为空,仅当调用onSaveInstanceState方法时才会填充它,这通常在旋转屏幕时发生,然后将填充saveInstance变量。 尝试这个 :

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

第一次登录logcat时,您会看到第一条消息,请尝试转动设备,否则其他消息将显示。

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

最简单的方法,但不推荐

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

活动:

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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM