-4

JSONからいくつかのデータを読み取るアプリがあり、これを行う2つのクラスがあります。

現在、両方のクラスに登録メンバーの完全なリストが表示されています。しかし、私が達成しようとしているのは、メンバーがクリックされたときに、そのメンバーだけが表示され、他のメンバーも表示されないということです。

両方のクラスのコードは次のとおりです。

リストビューから:

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

    
    
    }
}

そして、縦断ビューから:

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

    
    
    }
}

クリックされたメンバーを含む変数を他のクラスに渡す必要があることを確認しましたが、これを実現するにはどうすればよいですか?

4

3 に答える 3

2

インテントの使用:

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

次に、Listviewer.javaで:

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

ユーザーデータを渡すには、次のように変更します。

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); 
    }
});
于 2012-07-30T09:27:49.160 に答える
1
If you want to pass int value:

categoryView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Toast.makeText(CategoryView.this, "id::" + id,
                        Toast.LENGTH_SHORT).show();

                Intent menuIntent = new Intent(CategoryView.this,MenuListView.class);
                Bundle b = new Bundle();
                b.putInt("categoryId", (int) id); //Your id
                menuIntent.putExtras(b);
                menuIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(menuIntent);
                //finish();

            }

        });
于 2012-07-30T09:33:13.793 に答える
0

Extrasを使用してIntentオブジェクトを作成するときに、基本情報を送信できます。http://developer.android.com/guide/components/intents-filters.htmlをご覧ください。

多くの情報をロードする必要があり、Extrasが十分に正しくない場合は、必要なすべての情報を取り戻すために使用する「キー」を送信するだけです。

例えば:

このクラス

Intent intent = new Intent(thisClass, otherClass);
intent.putExtra("id", "1");
intent.putExtra("model", "model1");
startActivity(inte);

OtherClass

String query = "SELECT * FROM " + T_NAME + " WHERE 'id' = " + getIntent().getIntExtra("id",0);
Cursor c = db.rawQuery(query, null)
于 2014-09-07T08:13:58.177 に答える