Zakdroid
Zakdroid

Reputation: 102

Pass data from listview to field in other class

I have a listview in a class that should pass data to another class however it seems I am doing it wrong. Class A contains the listview and through an intent it sends the data back. Class B must receive the data and pass to a field. For that I use a bundle which contain the string and must pass it. However it seems I am doing something wrong. Any hints?

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

Class 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)

Upvotes: 0

Views: 814

Answers (4)

Ramesh sambu
Ramesh sambu

Reputation: 3539

Bundle add the object as serializable and send it to another fragment.

Upvotes: 0

Secondo
Secondo

Reputation: 451

note: Im not that knowledgeable in android so i dont know about Bundle class nor Intent class just want to share some thoughts.

Try this.

 String shop = argsss.getString("shop");

the value of the Item which is your key (shop) because of this.

  public static final String Item = "shop";

look at this ,

   //you are putting or passing the value of item3 to Item which is your key named "shop"
   intent.putExtra(Item,item3);

so you can only get the value using the key you set.

Update

try this

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

to get this try this.

    Bundle bundle = this.getIntent().getExtras(); 

    if(bundle !=null){
            //Obtain Bundle 
        String strdata = bundle.getString("shop"); 
            //do the process
    }

note again: i havent compile it i dont have ide for android its just a hint.

or

if you want to use only intent to pass some value

use your code above then on the other class you can get it by :

Intent intent = getIntent();

//this is how you retrieve the data 
String shop = intent.getStringExtra("shop");

Additional ref.

Intent

Fragment to Fragment Try this dude. :)

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

Additional info.

I think you cant pass data from fragment to another fragment directly.

Often you will want one Fragment to communicate with another, for example to change the content based on a user event. All Fragment-to-Fragment communication is done through the associated Activity. Two Fragments should never communicate directly.

Question.

//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?

Upvotes: 0

Pramod Yadav
Pramod Yadav

Reputation: 2326

you have sent data through the intent not bundle so get the data in other activity as intent

String shop = getActivity().getIntent().getStringExtra(ClassA.Item);

Upvotes: 0

Simon Dorociak
Simon Dorociak

Reputation: 33505

This should work:

String shop = getActivity().getIntent().getStringExtra(ClassA.Item);

Problem with your code it that you're binding String into Intent object directly and not into Bundle. This is reason why your code is not working. Your Bundle is empty.

Upvotes: 3

Related Questions