0

tableViewにJSON結果を表示する際に問題があり、フェッチされたデータを挿入する前にテーブル行をクリアする代わりに、古いデータからの新しいデータを連結するだけで、理由がわかりません。これが私のコードです:

まず、選択した都市と日付に基づいてすべての情報を取得するJSONパーサーがあり、その部分を表示する必要はないと思いますが、データをリスト配列に追加してから、この部分を実行します。

public void showinfo(){
    // Get the TableLayout
    TableLayout tl = (TableLayout) findViewById(R.id.maintable);
    tl.removeAllViews();

    Log.v(KahelTag, "eventsCleared");

    // Go through each item in the array
    for (int current = 0; current < infoID.size(); current++)
    {

        TableRow tr = new TableRow(this);
        tr.setId(100+current);
        tr.setLayoutParams(new LayoutParams(
                LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));   

       //CREATE TEXT VIEW FOR INFO1
        final TextView info1 = new TextView(this);
        clubName.setId(200+current);
        clubName.setText(info1.get(current));
        clubName.setTextColor(Color.WHITE);
        clubName.setTextSize(12);
        clubName.setTypeface(null, Typeface.BOLD);
        clubName.setTag(infoID.get(current));
        clubName.setGravity(Gravity.CENTER_VERTICAL);
        clubName.setLayoutParams(new LayoutParams(
                (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics()),
                LayoutParams.WRAP_CONTENT));
        tr.addView(info1);

        //CREATE TEXT VIEW FOR info2
        TextView info2 = new TextView(this);
        eventName.setId(current);
        eventName.setText(info2.get(current));
        eventName.setGravity(Gravity.CENTER_VERTICAL);
        eventName.setTextSize(12);
        eventName.setTextColor(Color.WHITE);
        eventName.setLayoutParams(new LayoutParams(
                (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 120, getResources().getDisplayMetrics()),
                LayoutParams.WRAP_CONTENT));
        tr.addView(info2);

      //CREATE TEXT VIEW FOR INFO3
        TextView info3 = new TextView(this);
        eventDate.setId(current);
        eventDate.setText(info3.get(current));
        eventDate.setGravity(Gravity.CENTER_VERTICAL);
        eventDate.setTextSize(12);
        eventDate.setTextColor(Color.WHITE);
        eventDate.setLayoutParams(new LayoutParams(
                (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics()),
                LayoutParams.WRAP_CONTENT));
        tr.addView(info3);

        // Add the TableRow to the TableLayout
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));


    }
}

ここで、showinfo()を使用してコンテンツビューを設定した後、その情報を表示します。そして今、スピナー部分について。JSONコードを再度呼び出してパラメーターを変更し、テーブルに情報を再度表示します。しかし、上で述べたように、データを連結するだけなので、思ったようには機能しません。ちなみに、JSONテキストに渡されるパラメーターは2つあります。スピナーのコードは次のとおりです。

    Spinner spinParam1 = (Spinner) findViewById(R.id.spinner1);
    Spinner spinParam2 = (Spinner) findViewById(R.id.spinner2);


    spinParam1.setOnItemSelectedListener(new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            Object specify_param1 = parentView.getItemAtPosition(position);
            if(specify_param1.toString() != "All"){
                getEvents(specify_param1.toString(),null);
                showinfo();
                Log.v(KahelTag, "showinfo");
            }
            else
            {
                getEvents(null,null);
                showinfo();
                Log.v(KahelTag, "elseshowinfo");
            }
        }
        public void onNothingSelected(AdapterView<?> parentView) {
            getEvents(null,null);
            showinfo();
            Log.v(KahelTag, "nothingshowinfo");
        }

    });

    spinParam2.setOnItemSelectedListener(new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            Object specify_param2 = parentView.getItemAtPosition(position);
            if(specify_param2.toString() != "Any"){
                getEvents(specify_param2.toString(),null);
                showinfo();
                Log.v(KahelTag, "showinfo");
            }
            else
            {
                getEvents(null,null);
                showinfo();
                Log.v(KahelTag, "elseshowinfo");
            }
        }

        public void onNothingSelected(AdapterView<?> parentView) {
            getEvents(null,null);
            showinfo();
            Log.v(KahelTag, "nothingshowinfo");
        }

    });

これを希望どおりに機能させるために必要な修正はありますか?ありがとう!

4

2 に答える 2

1

あなたがこのようにそれをするなら、私はするでしょう

tl = new TableLayout();

しかし、代わりにカスタムアダプタでlistviewを使用しないのはなぜですか。それは、必要なものに非常によく似ています。次に、x100テーブル行などを作成する必要はありません。

于 2012-07-17T10:20:34.590 に答える
0

気づいていませんが、問題の主な原因は、すべてのデータを格納するJSON文字列配列です。これが、前の出力のデータを連結する理由です。JSON文字列を解析する前に、最初に配列をクリアすることで問題を解決しました。:)

于 2012-07-18T06:18:51.513 に答える