我试图在一个ListView中使用选择来确定另一个ListView中显示的列表到四个维度。例如,第一个列表是:
A,B,C
然后通过选择列表A,你会得到
1,2,3
和B将返回。
4,5,6
如果选择1则
I,II,III。
选择5将返回另一个列表,依此类推。这将继续到最后的最终列表,最终将是用户的选择。
最后的ListView,将会有大约380个不同的列表。如果选择A然后是2然后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但是我遇到了同样的问题而没有在更多Switch中嵌套380个开关。
答案 0 :(得分:1)
不是使用大量的ListView,而是根据前一个ListView中的选择为每个维度使用一个大型数据结构和一个ListView。
例如,您可能拥有一个位置按大陆,国家,地区和城市划分的数据结构。每个大陆都有一份国家名单;每个国家都有一份地区清单;每个地区都有一个城市列表。根据数据集的比例,这可以作为一系列嵌套列表实现,或者您可以从数据库,Web服务或其他外部机制动态检索下一级别。
最初你会有一个显示大陆的ListView。用户选择一个后,所选索引将为您提供填充下一个ListView的国家/地区列表,以及区域和城市等等。
答案 1 :(得分: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>
第一个level3数组:
<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);