1

ある ListView での選択を使用して、別の ListView に表示されるリストを 4 つの次元に決定しようとしています。たとえば、最初のリストは次のようになります。

A、B、C

次に、リストAを選択すると、

1、2、3

そしてBは戻ってきます。

4、5、6

1を選択した場合

Ⅰ、Ⅱ、Ⅲ。

5 を選択すると、さらに別のリストが返されます。これは、最終的にユーザーの選択となる 4 番目の最終リストに続きます。

開始する最終的な ListView には、約 380 の異なるリストが含まれる可能性があります。A を選択してから 2 を選択し、次に XII を選択すると、正しいリストが表示されます。おそらく、選択に従ってリストに A2XII と名前を付け、その名前でリストを呼び出すことができます。

現在、私の理論は、最初の ListView を設定し、次にリスナーでそれを INVISIBLE にして、次に VISIBLE にすることです。次に、前の選択を使用して、アダプタが使用するリストを決定します。

私の質問は次のとおりです。1 つのリストから選択して、次のリストを名前で決定するにはどうすればよいですか?

        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;
    }
}

これを行うためのより良い方法があれば、答えを知っていただければ幸いです。最初に考えたのはスピナーを使用することでしたが、380 個のスイッチを複数のスイッチの中に入れ子にしないと、同じ問題に遭遇しました。

4

2 に答える 2

1

多数の ListView の代わりに、1 つの大きなデータ構造と、前の ListView での選択に基づいて設定されたディメンションごとに 1 つの 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>

次の 3 つの配列は、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 に答える