Android的ListView控件将数据传递到另一个列表视图

问题描述:

怎么写,可以从一个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(); 
} 

}

你不需要将数据传递到另一个ListView中,只需要一个ListView控件来实现你的愿望。你将不得不自己做的映射,即宝马映射到一个列表(的java.util.ArrayList)包含所有宝马车系列车型,和奔驰映射到一个包含所有奔驰轿车系列车型的列表等

当你选择一个汽车品牌,你交换基础数据集为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 2012-04-06 01:41:06

+0

使用一个新的ListView或一个新的活动是矫枉过正了OP的问题。然而,如果问题更复杂,我同意你的看法。我只是提供了一个选项,并试图简单的事情。 – neevek 2012-04-06 03:04:32

+0

那么,如果用户选择了宝马,你清除数据并加载所有的宝马车,你想要的,但随后的用户意识到了他们想要奔驰呢?如果您有一项活动,那么当用户点击后退按钮时,除非您手动处理后退按钮并管理自己的导航堆栈,否则他们将退出整个活动。使用新的活动并不过分。这是标准的。 – kabuko 2012-04-06 18:27:29