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

Android 如何将字符串数据从活动传递到片段?,android,android-fragments,fragment,Android,Android Fragments,Fragment,我想将字符串值从活动传递到片段。为此,我使用bundle来传输字符串值 放置字符串活动 传递字符串值:- Bundle bundle = new Bundle(); bundle.putString("Value", resultp.get(CurrentProjectActivity.VALUE)); Log.d(TAG, "Value ::: " + resultp.get(CurrentProjectActivity.

我想将字符串值从活动传递到片段。为此,我使用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);
在日志中,我也得到了“Value”值

获取片段中的字符串值(它不工作)


在日志中,我得到了BUNDLE的NULL值。请帮我解决这个问题。提前谢谢。

我建议您遵循此步骤并继续。您应该使用接口。检查

在框架任务中

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

我建议你遵循这一点,并且。您应该使用接口。检查

在框架任务中

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

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

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

    public MyFragment(String data){
       this.data = data;
    }
您还可以使用as bundle@james answer

编辑:-

第一条路

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

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

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

    public MyFragment(String data){
       this.data = data;
    }
您还可以使用as bundle@james answer

编辑:-

第一条路

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方法时才会填充,这通常发生在旋转屏幕时,然后将填充savedInstance变量。试试这个:

if(savedInstance != null){
  Log.d(TAG, "There's is something");
}else{
  Log.d(TAG, "Nothing in there");
}
第一次在logcat中,您将看到第一条消息,尝试转动您的设备,else中的消息将显示


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

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

if(savedInstance != null){
  Log.d(TAG, "There's is something");
}else{
  Log.d(TAG, "Nothing in there");
}
第一次在logcat中,您将看到第一条消息,尝试转动您的设备,else中的消息将显示


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

假设您希望将字符串数据从活动发送到片段

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

public static String name= null;

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

Fragment fragment =  new Fragment();
fragment.setName(stringYouWantToSend);   
在要从中发送字符串的MainActivity.java中,添加以下代码

public static String name= null;

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

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

假设您希望将字符串数据从活动发送到片段

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

public static String name= null;

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

Fragment fragment =  new Fragment();
fragment.setName(stringYouWantToSend);   
在要从中发送字符串的MainActivity.java中,添加以下代码

public static String name= null;

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

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

最简单的方法,但不推荐

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

活动:

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

最简单的方法,但不推荐

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

活动:

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

在哪里创建和设置片段的参数?“Value”是我使用JSON解析技术从JSON中选择的Sting。从中我也可以得到价值。在日志中我可以看到。@Amar可能resultp.get(CurrentProjectActivity.VALUE)不是String类型。用另一种方法检查我的答案。你在哪里创建并设置参数来分段?“VALUE”是我使用JSON解析技术从JSON中选取的Sting。从中我也可以得到价值。在日志中我可以看到。@Amar可能resultp.get(CurrentProjectActivity.VALUE)不是String类型。用另一种方式检查我的答案。这些链接非常好。几天前我用了第一个链接。@Paritosh那么问题出在哪里呢。这就是我们使用它的方式。我使用滑动菜单作为这个界面。@Amar现在工作了。请再核对一下value@james. 它不起作用。对于滑动菜单,我正在实现这个概念。所以我也在SlidengActivity中创建了片段。这也许就是原因。我会检查并更新。谢谢:)这些链接真的很好。几天前我用了第一个链接。@Paritosh那么问题出在哪里呢。这就是我们使用它的方式。我使用滑动菜单作为这个界面。@Amar现在工作了。请再核对一下value@james. 它不起作用。对于滑动菜单,我正在实现这个概念。所以我也在SlidengActivity中创建了片段。这也许就是原因。我会检查并更新。谢谢:)我没按你说的做。我认为你正在试图以我们在《人类》中使用的方式获取数据。完美的克利里明白你想说什么。谢谢,我没有按你的方式去做。我认为你正在试图以我们在《人类》中使用的方式获取数据。完美的克利里明白你想说什么。谢谢