1

我正在尝试使用一个 ListView 中的选择来确定在另一个 ListView 中显示的列表为四个维度。例如,第一个列表是:

甲、乙、丙

然后通过选择列表 A 你会得到

1、2、3

B会回来。

4、5、6

如果选择了 1 则

一、二、三。

选择 5 将返回另一个列表,依此类推。这将继续到最终将是用户选择的第四个和最终列表。

最终的 ListView 开始时将有大约 380 个不同的列表。如果选择 A 然后 2 然后 XII 然后显示正确的列表。大概我可以根据选择将列表命名为 A2XII,然后用该名称调用列表。

目前,我的理论是设置第一个 ListView 然后在 Listener 中使其不可见并使其下一个可见。然后使用之前的选择来确定 Adapter 使用的列表。

所以我的问题是:我如何从一个列表中选择并让它按名称确定下一个列表?

        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 个 Switch 嵌套在更多 Switch 中的情况下,我遇到了同样的问题。

4

2 回答 2

1

使用单个大型数据结构和一个 ListView,而不是大量的 ListView,每个维度都基于上一个 ListView 中的选择填充。

例如,您可能有一个按大陆、国家、地区和城市划分位置的数据结构。每个大陆都有一个国家列表;每个国家都有一个地区列表;每个地区都有一个城市列表。根据数据集的规模,这可以实现为一系列嵌套列表,或者您可以从数据库、Web 服务或其他外部机制动态检索下一个级别。

最初,您将有一个显示大陆的 ListView。一旦用户选择了一个,选定的索引就会为您提供国家列表以填充下一个 ListView,以此类推,以获取地区和城市。

于 2013-11-03T00:44:02.550 回答
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);
于 2013-11-03T07:17:51.853 回答