2012-04-05 2 views
0

자동차 브랜드 목록에서 BMW를 선택하면 lisview에서 다른 listview로 데이터를 전달할 수있는 코드를 작성하는 방법 listview에서 특정 자동차 시리즈를 선택할 수 있습니다.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는 모든 BMW 카 시리즈 모델을 포함하는 목록 (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

+0

새 ListView 또는 새 활동을 사용하면 OP 문제가 과도하게 발생합니다. 그러나 문제가 더 복잡하면 당신의 의견에 동의합니다. 방금 옵션을 제안하고 간단한 것을 단순하게 유지하려고했습니다. – neevek

+0

그렇다면 사용자가 BMW를 선택하면 데이터를 지우고 원하는 모든 BMW를로드하지만 사용자가 대신 메르세데스를 원한다는 것을 알았습니까? 하나의 액티비티가있는 경우, 사용자가 직접 뒤로 버튼을 처리하고 자체 탐색 스택을 관리하지 않는 한 사용자가 뒤로 버튼을 클릭하면 모든 것을 되돌릴 수 있습니다. 새로운 활동을 사용하는 것은 과도하지 않습니다. 표준입니다. – kabuko

관련 문제