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...
}
}
我一般不会推荐这样做。您不仅可以更换数据,而且当您点击某个项目时可能还需要不同的行为。另外,如果你想使用一些布局,而不是仅仅一行?这是本质上不同的数据,它通常最好还是使用新的ListView,甚至常常一个新的活动。 – kabuko 2012-04-06 01:41:06
使用一个新的ListView或一个新的活动是矫枉过正了OP的问题。然而,如果问题更复杂,我同意你的看法。我只是提供了一个选项,并试图简单的事情。 – neevek 2012-04-06 03:04:32
那么,如果用户选择了宝马,你清除数据并加载所有的宝马车,你想要的,但随后的用户意识到了他们想要奔驰呢?如果您有一项活动,那么当用户点击后退按钮时,除非您手动处理后退按钮并管理自己的导航堆栈,否则他们将退出整个活动。使用新的活动并不过分。这是标准的。 – kabuko 2012-04-06 18:27:29