Search code examples
androidandroid-listview

Passing info from one intent to the other


I have an app which reads some data from JSON, and I have 2 classes which do this.

Right now both classes display the full list of registered members. But what I'm trying to achieve is that when a member is clicked I only get to see that member and not the other ones as well.

Here is the code from both classes:

From the listview:

public class Listviewer extends ListActivity {
    
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);


        setContentView(R.layout.listplaceholder);

       
        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
      
       
        JSONObject json = JSONfunctions.getJSONfromURL("http://de-saksen.nl/deelnemers.txt");
                
        try{
            
            JSONArray  deelnemers = json.getJSONArray("deelnemers");
            
            for(int i=0;i<deelnemers.length();i++){                     
                HashMap<String, String> map = new HashMap<String, String>();    
                JSONObject e = deelnemers.getJSONObject(i);
                
                map.put("id",  String.valueOf(i));
                map.put("name", "Character Naam: " +  e.getString("naamingw2"));
                map.put("sex", "Geslacht: " +  e.getString("geslacht"));
                map.put("rank", "Rang: " +  e.getString("rang"));

                mylist.add(map);            
            }   
               
            
            
        }catch(JSONException e)        {
             Log.e("log_tag", "Error parsing data "+e.toString());
        }
        
        ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, 
                        new String[] { "name", "sex", "rank"}, 
                        new int[] { R.id.item_title, R.id.item_subtitle, R.id.item_subtitle2 });
        
        setListAdapter(adapter);
        
        final ListView lv = getListView();
        lv.setTextFilterEnabled(true);  
        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
                Intent intent = new Intent(Listviewer.this, Profileviewer.class);   
                startActivity(intent); 
            }
        });

    
    
    }
}

And from the profile view:

public class Profileviewer extends ListActivity {
    
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

        setContentView(R.layout.listplaceholder);
       
        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
       
        JSONObject json = JSONfunctions.getJSONfromURL("http://de-saksen.nl/deelnemers.txt");
                
        try{
            
            JSONArray  deelnemers = json.getJSONArray("deelnemers");
            
            for(int i=0;i<deelnemers.length();i++){                     
                HashMap<String, String> map = new HashMap<String, String>();    
                JSONObject e = deelnemers.getJSONObject(i);
                
                map.put("id",  String.valueOf(i));
                map.put("name", "Naam: " +  e.getString("naamingw2"));
                map.put("sex", "Geslacht: " +  e.getString("geslacht"));
                map.put("rank", "Rang: " +  e.getString("rang"));
                map.put("race", "Ras: " +  e.getString("ras"));
                map.put("profession", "Beroep: " +  e.getString("beroep"));
                map.put("skills", "Hobby's: " +  e.getString("hobbys"));
                map.put("lvl", "Level: " +  e.getString("level"));
                mylist.add(map);            
            }   
               
            
            
        }catch(JSONException e)        {
             Log.e("log_tag", "Error parsing data "+e.toString());
        }
        
        ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.profile, 
                        new String[] { "name", "sex", "rank", "race", "profession", "skills", "lvl" }, 
                        new int[] { R.id.item_title, R.id.item_subtitle, R.id.item_subtitle2, R.id.item_subtitle3, R.id.item_subtitle4, R.id.item_subtitle5, R.id.item_subtitle6 });
        
        setListAdapter(adapter);
        
        final ListView lv = getListView();
        lv.setTextFilterEnabled(true);  
        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
                Intent intent = new Intent(Profileviewer.this, Listviewer.class);   
                startActivity(intent); 
            }
        });

    
    
    }
}

I recon I have to pass a variable to the other class containing what member has been clicked, but how do I achieve this?


Solution

  • using the intent:

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
            Intent intent = new Intent(Profileviewer.this, Listviewer.class);
            intent.putExtra("Key", value);
            startActivity(intent); 
        }
    });
    

    Then in Listviewer.java:

    getIntent().getStringExtra("Key"); //for example
    

    To pass user data, modify like:

    String [] users = new String[] { "name", "sex", "rank", "race", "profession", "skills", "lvl" };
    int[] ids = new int[] { R.id.item_title, R.id.item_subtitle, R.id.item_subtitle2, R.id.item_subtitle3, R.id.item_subtitle4, R.id.item_subtitle5, R.id.item_subtitle6 };
    
    ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.profile, 
                    users, ids);
    
    setListAdapter(adapter);
    
    final ListView lv = getListView();
    lv.setTextFilterEnabled(true);  
    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
            Intent intent = new Intent(Profileviewer.this, Listviewer.class);   
            intent.putExtra("Key", users[position]);
            startActivity(intent); 
        }
    });