2012-04-05 19 views
0

車のブランドリストからBMWを選択した場合のように、1つのlisviewから別のリストビューにデータを渡すことができるコードを書く方法リストビューの特定の車シリーズを選択できるようになりますAndroid ListView別のリストビューにデータを渡す

main.XML

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    android:textSize="20sp" > 
</TextView> 

CarActivity.JAVA

package car.brand.test; 

package car.brand.test; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class CarActivity extends ListActivity { 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     String[] values = new String[] { "BMW", "Mercedes","Nissan"}; 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, values); 
     setListAdapter(adapter); 
    } 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    String item = (String) getListAdapter().getItem(position); 
    Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show(); 
} 

}

答えて

0

別のListViewにデータを渡す必要はなく、1つのListViewだけが必要なものを実現するために必要です。 BMWはすべてのBMWカーシリーズモデルを含むリスト(java.util.ArrayList)にマップします。メルセデスはすべてのメルセデス自動車シリーズモデルを含むリストにマップします。

カーブランドを選択すると、リストビューの基になるデータセットを交換し、notifyDataSetChanged()を呼び出します。

スニペット:

MyAdapter myAdapter = ...; 
Map<String, List<String>> carSeriesMap = ...; 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    String brand = (String) getListAdapter().getItem(position); 
    List<String> carSeriesList = carSeriesMap.get(brand); 
    // set carSeriesList as the underlying dataset for the adapter 
    myAdapter.setDataset(carSeriesList); 
} 

class MyAdapter extends BaseAdapter { 
    List<String> dataset; 
    public void setDataset (List<String> newDataset) { 
     dataset = newDataset; 
     notifyDataSetChanged(); 
    } 
    public View getView(int position, ......) { 
     // get data from dataset 
     String text = dataset.get(position); 
     // other code here... 
    } 
} 
+0

私は一般的にこれをお勧めしません。データを交換するだけでなく、アイテムをクリックしたときに違った振る舞いをしたいと思うかもしれません。また、単一行以外のレイアウトを使用したい場合はどうしますか?それは本質的に異なるデータですが、通常は新しいListViewを使用するほうがよいでしょう。 – kabuko

+0

新しいListViewまたは新しいアクティビティを使用すると、OPの問題が過剰に発生します。しかし、問題がより複雑であれば、私はあなたに同意します。私はちょうどオプションを提示し、単純なものを単純に保つように努めました。 – neevek

+0

だから、ユーザーがBMWを選択すると、データを消去してすべてのBMWをロードしますが、その代わりにメルセデスが気に入ったと思いますか? 1つのアクティビティがある場合、バックボタンを手動で処理して独自のナビゲーションスタックを管理しない限り、ユーザーが戻るボタンをクリックすると、すべてのものから復帰します。新しいアクティビティを使用することは過労ではありません。それは標準です。 – kabuko

関連する問題