1

我想在一個ListView中使用選擇來確定在另一個ListView中顯示的列表爲四個維度。例如,第一個列表是:如何使用ListView選擇來確定Android中另一個ListView中的列表?

A,B,C

然後通過選擇一個列表,你會得到

1,2,3

和B會返回。

4,5,6

如果選擇1然後

I,II,III。

選擇5會返回另一個列表等等等等。這將繼續進入第四個和最終的列表,最終將是用戶的選擇。

要開始的最終ListView將有大約380個不同的列表它可能是。如果選擇A然後是XII然後顯示正確的列表。據推測,我可以根據選定的名單命名爲A2XII,然後以該名稱呼叫該名單。

目前,我的理論是設置第一個ListView,然後在Listener中使其變爲INVISIBLE並使VISIBLE成爲下一個。然後使用先前的選擇來確定適配器使用的列表。

所以我的問題是:我如何從一個列表中選擇,並讓它按名稱確定下一個列表?

 package org.wmu.LMWTA; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.Toast; 

     import org.wmu.LMWTA.R; 

     public class Frag_Form extends Fragment { 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     final View V = (LinearLayout)inflater.inflate(R.layout.form_layout, container, false); 
     if (container == null) { 
      return null; 
     } 

     final ListView cityList = (ListView) V.findViewById(R.id.list_city); 
     final ListView cat = (ListView) V.findViewById(R.id.cat); 
     ArrayAdapter<CharSequence> cityAdapt = ArrayAdapter.createFromResource(getActivity(), 
       R.array.cities, android.R.layout.simple_spinner_dropdown_item); 
     ArrayAdapter<CharSequence> catAdapt = ArrayAdapter.createFromResource(getActivity(), 
       R.array.cat, android.R.layout.simple_spinner_dropdown_item); 
     //ArrayAdapter<CharSequence> catAdapt = ArrayAdapter.createFromResource(getActivity(), 
     //  R.array.subCat, android.R.layout.simple_spinner_dropdown_item); 

     cat.setAdapter(catAdapt); 
     cat.setVisibility(View.GONE); 
     cityList.setAdapter(cityAdapt); 
     cityList.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // When clicked, show toast 
       Toast.makeText(parent.getContext(), 
       (CharSequence) cityList.getItemAtPosition(position).toString().replaceAll("\\s+", ""), Toast.LENGTH_SHORT).show(); 
       cityList.setVisibility(View.GONE); 
       cat.setVisibility(View.VISIBLE); 
      } 
     }); 
     return V; 
    } 
} 

如果有更好的方法來做到這一點,我將非常感激知道答案。我的第一個想法是使用Spinners,但遇到同樣的問題,而沒有在更多交換機內嵌套380個交換機。

回答

0

設置數組,使它們包含它們所屬的上一個列表項目的索引。

<string-array name="level_1"> 
     <item>A</item> 
     <item>B</item> 
     <item>C</item> 
</string-array> 

接下來的三個陣列是依賴於LEVEL_1

<string-array name="level_2_sub00"> 
     <item>1</item> 
     <item>2</item> 
     <item>3</item> 
</string-array> 

<string-array name="level_2_sub01"> 
     <item>4</item> 
     <item>5</item> 
     <item>6</item> 
</string-array> 

而第一級別3陣列的那些:

<string-array name="level_3_sub00"> 
     <item>I</item> 
     <item>II</item> 
     <item>III</item> 
</string-array> 

現在你只需要使用所選項目的位置來計算下一個陣列的名稱:

String level2_arrayname = "level_2_sub" + String.valueof(position); 
int resourceIdNext = getActivity().getResources.getIdentifier(level2_arrayname, "array", mypackagename); 
+0

謝謝。這正是我所期待的。 – CaptinG

1

而不是大量的ListViews,基於前面的ListView中的選擇使用單個大型數據結構和每個維度填充一個ListView。

例如,您可能有一個數據結構,其地理位置除以大陸,國家,地區和城市。每個大陸都有一個國家名單;每個國家都有一個地區清單;每個地區都有一個城市列表。根據數據集的規模,這可能會作爲一系列嵌套列表實現,或者您可以從數據庫,Web服務或其他外部機制動態檢索下一個級別。

最初你會有一個ListView顯示大洲。一旦用戶選擇一個,選定的索引就會爲您提供填充下一個ListView的國家列表,以及地區和城市的其他內容。

相關問題