将数据从listview传递到其他类中的字段

时间:2014-12-10 09:34:07

标签: java android listview

我在一个类中有一个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)

4 个答案:

答案 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");

附加参考

Intent

Fragment to Fragment试试这个家伙吧。 :)

Fragment to Fragment . Look at the last answer it may help you finding some ways on how fragments work.

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将对象添加为可序列化并将其发送到另一个片段。