Android 如何将字符串数据从活动传递到片段?
我想将字符串值从活动传递到片段。为此,我使用bundle来传输字符串值 放置字符串活动 传递字符串值:-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 = 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中创建了片段。这也许就是原因。我会检查并更新。谢谢:)我没按你说的做。我认为你正在试图以我们在《人类》中使用的方式获取数据。完美的克利里明白你想说什么。谢谢,我没有按你的方式去做。我认为你正在试图以我们在《人类》中使用的方式获取数据。完美的克利里明白你想说什么。谢谢