user2491711
user2491711

Reputation: 11

passing the data of the selected items to another activity - android

I have a menu (fishcombovaluemeals), and when the user select more than 1 item i want those items to appear in a list in another activity (shopping cart) ,i have tried alot but the data
never appears in the shopping cart ! what is wrong in the onitemclick !? , I have

fishcombovaluemeal.java  
RowItem.java  
CustomListViewAdapter.java  

fishcombovaluemealsactivitycode:

package com.example.newlist;

  public class FishComboValueMeals extends Activity  implements
  OnItemClickListener {
          ImageButton  Ib2;
          public static final String[] titles = new String[] {
" Fillet-O-Fish (Medium Value     Meals) ",
"Fillet-O-Fish (Large Value Meals)  ",
"Double Fillet-O-Fish (Medium     Value Meals)",
" Double Fillet-O-Fish (Large Value     Meals)  ",

};




public static final String[] descriptions = new String[] {
        "Light, flaky filet of white fish    topped with tangy tartar   ",
        "Light, flaky filet of white fish     topped with tangy tartar   ",
        "2 patties of tender fish filet over a       layer of cheese,    ",
        " 2 patties of tender fish filet over a       layer of "

};
public static final Integer[] images = { 
                           R.drawable.imfc1,
               R.drawable.imfc2,        
                           R.drawable.imfc3, 
                           R.drawable.imfc4  };



public static final Double[] prices = { 20.0, 22.73, 24.77,  27.04 };

ListView listView;
List<RowItem> rowItems;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_breakfast);


    rowItems = new ArrayList<RowItem>();
    for (int i = 0; i < titles.length; i++) {
        RowItem item = new RowItem    (images[i], titles[i], descriptions[i],
                prices[i]);
        rowItems.add(item);
    }
    listView = (ListView) findViewById(R.id.list);
    CustomListViewAdapter adapter = new     CustomListViewAdapter(this,
            R.layout.list_item,     rowItems);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(this);


    Ib2 = (ImageButton) findViewById    (R.id.Button02);


    Ib2.setOnClickListener(new View.OnClickListener() {

    @Override
public void onClick(View arg0) {
// TODO Auto-generatedmethod stub
Intent openStartingPoint = new Intent (getApplicationContext(),ShoppingCart.class);


            startActivity (openStartingPoint);

        }
    });}    



@Override
public void onItemClick(AdapterView<?> parent, View   view, int position,
        long id) {

Intent i = new Intent(getApplicationContext(), ShoppingCart.class);

i.putExtra("EXTRA", "Item " + (position + 1) + ": " + rowItems.get(position));
    startActivity(i);
        }


}

Upvotes: 1

Views: 4864

Answers (4)

Michael Shrestha
Michael Shrestha

Reputation: 2555

You can try this

@Override
public void onItemClick(AdapterView<?> parent, View   view, int position,
        long id) {
    RowItem selItem =  rowItems.get(position);//get the selected RowItem from the list
    String[] selValues= selItem.getMethodName();//your method name in RowItem.java class
                                                //which returns array  
    //if you have getter and setters you can access them and put them in array
    //String[] selArray = new String[size];//size = number of value you want to supply
    //String[0]= selItem.getTitle();//for title
    //String[1] = selItem.getDescription();//for description and so on
    //then send the array as parameter 

    // remaining is same as answered by the Jay Gajjar

    Bundle b=new Bundle();
    b.putStringArray("EXTRA", selArray);
    Intent i = new Intent(getApplicationContext(), ShoppingCart.class);
    i.putExtras(b);
    startActivity(i);
}

and to retrieve the values in the ShoppingCart class

Bundle b=this.getIntent().getExtras();
String[] array=b.getStringArray("EXTRA");

Upvotes: 0

Sunil Kumar
Sunil Kumar

Reputation: 7092

get the selected item of list view and send the value via intent

@Override
public void onItemClick(AdapterView<?> parent, View   view, int position,
        long id) {
String value = lv1.getItemAtPosition(position).toString();
Intent i = new Intent(getApplicationContext(), ShoppingCart.class);
i.putExtra("EXTRA", value);
    startActivity(i);
}

and get the value in other activity

Bundle bundle=getIntent().getExtras();
String value=bundle.getString("EXTRA");

Upvotes: 1

Jay Gajjar
Jay Gajjar

Reputation: 2741

You need to create a singleton array of the menu items. When user performs multi select jst store the selectedindex to an array and then pass that array to the intent.

Here is the tutorial for multi-select listview

http://www.vogella.com/articles/AndroidListView/article.html

Here is the code to send array in intent

Bundle b=new Bundle();
b.putStringArray(key, new String[]{value1, value2});
Intent i=new Intent(context, Class);
i.putExtras(b);

Bundle b=this.getIntent().getExtras();
String[] array=b.getStringArray(key);

Upvotes: 0

Klawikowski
Klawikowski

Reputation: 615

You can use a very simple Class which will store your data into it. I warn you that this class is just a simple proposition how to solve your problem. It has many weaknesses but it works ; ) You can improve it : ) Just init it at Application Class.

Here is example:

/**
 * Manager to handle passing data between Activities
 * 
 * @author Klawikowski
 * 
 */
public class ManagerBundle implements IConstants
{
    public static final String TAG = "ManagerBundle";

    private static Hashtable< Integer , Object > sDataTable;

    public static void init()
    {
        Log.i( TAG , "[ManagerBundle] Initializing ..." );
        sDataTable = new Hashtable< Integer , Object >();
    }

    public static void addBundle( int pKey , Object pObjectToPass )
    {
        Log.i( TAG , "[ManagerBundle] Adding Object to Manager using key: " + pKey );
        sDataTable.put( pKey , pObjectToPass );
    }

    public static Object getBundle( int pKey )
    {
        Log.i( TAG , "[ManagerBundle] Getting Object from Manager using key: " + pKey );
        Object lData = sDataTable.get( pKey );
        sDataTable.remove( pKey );
        return lData;
    }
}

Just simply put an Table / Array or any other container before starting Activity, and collect it from 2nd one ; )

Upvotes: 0

Related Questions