2012-04-05 2 views
0

Как написать код, который может передавать данные из одного lisview в другой список, например, если я выберу BMW из списка брендов автомобилей, я смогу выбрать конкретную серию автомобилей, которая находится в списке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, для достижения желаемого вам необходим только один ListView. Вам нужно будет сделать картографирование самостоятельно, то есть карты BMW, в список (java.util.ArrayList), который содержит все модели автомобилей BMW, и карты Мерседеса в список, содержащий все модели автомобилей Mercedes, и т. Д.

Когда вы выбираете марку автомобиля, вы меняете базовый набор данных для ListView и вызываете 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, которые хотите, но тогда пользователь понял, что им нужен Mercedes вместо этого? Если у вас есть одно действие, тогда, когда пользователь нажимает кнопку «Назад», если вы не вручную обрабатываете кнопку «Назад» и не управляете своим собственным стеклом навигации, они откажутся от всего этого. Использование нового действия не является излишним. Это стандартно. – kabuko

Смежные вопросы