我在一个类中有一个listview,它应该将数据传递给另一个类但是看起来我做错了。 A类包含列表视图,并通过意图将数据发回。 B类必须接收数据并传递给字段。为此,我使用包含字符串的包,必须通过它。然而,我似乎做错了什么。任何提示?
A类。
public static final String Item = "shop";
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item3 = (String)arrayAdapter.getItem(position).toString();
Intent intent = new Intent(getActivity().getApplicationContext(),ClassB.class);
intent.putExtra(Item,item3);
startActivity(intent);
//Toast.makeText(getActivity().getApplicationContext(), "msg msg", Toast.LENGTH_LONG).show();
}
});
B级。
Bundle argsss = new Bundle();
argsss = getActivity().getIntent().getExtras();
if(argsss != null){
String shop = argsss.getString(ClassA.Item);
testButton.setText(shop);
}
Stacktrace:
Process: nl.boydroid.loyalty4g.app, PID: 27526
android.content.ActivityNotFoundException: Unable to find explicit activity class {nl.boydroid.loyalty4g.app/nl.boydroid.loyalty4g.app.redeempoints.RedeemItemFragment}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1636)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1430)
at android.app.Activity.startActivityForResult(Activity.java:3532)
at android.app.Activity.startActivityForResult(Activity.java:3493)
at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:849)
at android.support.v4.app.Fragment.startActivity(Fragment.java:880)
at nl.boydroid.loyalty4g.app.redeempoints.SearchableShopList$1.onItemClick(SearchableShopList.java:90)
at android.widget.AdapterView.performItemClick(AdapterView.java:308)
at android.widget.AbsListView.performItemClick(AbsListView.java:1524)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3531)
at android.widget.AbsListView$3.run(AbsListView.java:4898)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5586)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:3)
这应该有效:
String shop = getActivity().getIntent().getStringExtra(ClassA.Item);
您的代码问题是您将String直接绑定到Intent对象而不是Bundle。这就是您的代码无法正常工作的原因。你的Bundle是空的。
答案 1 :(得分:0)
您已通过intent not bundle发送数据,因此将其他活动中的数据作为intent
获取String shop = getActivity().getIntent().getStringExtra(ClassA.Item);
答案 2 :(得分:0)
注意:我不是那么知识渊博,所以我不知道Bundle类和Intent类只是想分享一些想法。
试试这个。
String shop = argsss.getString("shop");
这是你的关键Item
的价值(shop
)。
public static final String Item = "shop";
看看这个,
//you are putting or passing the value of item3 to Item which is your key named "shop"
intent.putExtra(Item,item3);
因此您只能使用您设置的密钥获取值。
试试这个
// first create a bundle for you to be able to use it later.
Bundle sampleBundle = new Bundle();
// then set the values you want. with the Item key.
sampleBundle.putString(Item, item3);
// then create the intent
Intent intent = new Intent(getActivity().getApplicationContext(),ClassB.class);
// then put your bundle to intent.
intent.putExtras(sampleBundle);
startActivity(intent);
试试这个。
Bundle bundle = this.getIntent().getExtras();
if(bundle !=null){
//Obtain Bundle
String strdata = bundle.getString("shop");
//do the process
}
再次注意:我没有编译它我没有ide的android只是一个提示。
或
如果你只想使用意图传递一些值
使用上面的代码,然后在另一个类上使用:
Intent intent = getIntent();
//this is how you retrieve the data
String shop = intent.getStringExtra("shop");
Fragment to Fragment试试这个家伙吧。 :)
Another possible solution Passing data fragment to fragment
我认为你不能直接将数据从片段传递到另一个片段。
通常你会想要一个片段与另一个片段进行通信 示例根据用户事件更改内容。所有 片段到片段的通信是通过相关联的 活动。两个碎片永远不应该直接沟通。
//note: not sure about the flow of the program. just want to ask.
ClassA extends Activity ClassB extends Activity
|| ||
ClassA call the FragmentClassA? FragmentClassB startActivity(ClassB)?
|| ||
FragmentClassA you want to pass data --> ? FragmentClassB
after that, you want to start the ClassB Activity class inside FragmentClassB?
答案 3 :(得分:0)
Bundle将对象添加为可序列化并将其发送到另一个片段。