0

私はこの問題を約2時間解決しようとしています。だから私はすべての可能な答えをうれしく思います。私はカスタムListViewAdapterを持っていて、それは彼のコンテンツを配列から取得します。しかし、19個の配列があり、ユーザーがクリックした日付に基づいてコンテンツ(したがって配列)を変更したいと思います(上部に19個の日付のカレンダーがあります)。これが写真です:

ここに画像の説明を入力してください

したがって、デフォルトでは、アプリを開くと、「date_1」配列のコンテンツが表示されます(カレンダーの25の場合)。また、他の日付をクリックすると、この日付に属する配列のコンテンツが表示されます(たとえば、26。-> date_2、27。date_3など)。すべての配列はリソースから負荷を取得する必要があり、単一の配列変数に保存されます。

だから私の問題: 私はアレイを変更することはできません。これが私のコードです:

// this is the Array Variable:

   String[] day_chosen;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.calender);
          [...]
            prepareArrayLits();
            lview3 = (ListView) findViewById(R.id.listView1);

            adapter = new ListViewCustomAdapter(this, itemList);
            lview3.setAdapter(adapter);

            lview3.setOnItemClickListener(this);

        }

        public void onItemClick1(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub

        }

        /* Method used to prepare the ArrayList,
         */

        public void prepareArrayLits()
        {
            // this is where the Arrays get loaded from the resource:
             day_chosen = getResources().getStringArray(R.array.date_1);

//this Array is not relvant:
            String[] sports = getResources().getStringArray(R.array.sports_array);


            itemList = new ArrayList<Object>();
             for (int counter = 0; counter < day_chosen.length; counter+=4){


                 int Intparser = Integer.parseInt(day_chosen[counter+1]);


                 AddObjectToList(imgid(Intparser),  sports[Intparser],day_chosen[counter],day_chosen[counter+3], backgroundbox(Intparser)) ;
             }


        }

        // Add one item into the Array List
        public void AddObjectToList(int image, String title, String desc, String time, int backbox)
        {

            bean = new ItemBean();
            bean.setBackBox(backbox);
            bean.setTime(time);
            bean.setDescription(desc);
            bean.setImage(image);
            bean.setTitle(title);
            itemList.add(bean);
        }

       [...]
        }

        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            // TODO Auto-generated method stub

        }

// the onClick Events for every date:
        public void onClick(View v) {
            // TODO Auto-generated method stub




              switch(v.getId()){

              case R.id.d_1 :
// I tried to change the Array from here(But it didn't work):
                  day_chosen = getResources().getStringArray(R.array.date_1);


                  break;

              case R.id.d_2 :
                  day_chosen = getResources().getStringArray(R.array.date_2);

                  break;
              [...]

        }



    }

私は何を試しましたか:

  • グローバルクラスを設定しましたが、機能しませんでした

  • ゲッターとセッターを設定してみました。しかし、また機能しませんでした

これを解決する方法がわかりません。考えられるすべての解決策に感謝します、ありがとう。

4

2 に答える 2

2

ですから、上部の日付をクリックすると、以下の内容が変わると思います。これを行うにはさまざまな方法があります。現在のコードの現在の問題を解決するために、次のことを実行します。表示したコードに基づいて、次のようなコード行があると想定していますnew MyHappyAdapter(... itemList, ...)。 itemList参照、おそらくある種のArrayAdapter。もしそうなら、あなたはあなたのswitchステートメントの直後にこれを追加したいと思うでしょう:

 public void onClick(View v) {
     switch(v.getId()){

          case R.id.d_1 :
              // I tried to change the Array from here(But it didn't work):
              day_chosen = getResources().getStringArray(R.array.date_1);
              break;

          case R.id.d_2 :
              day_chosen = getResources().getStringArray(R.array.date_2);
              break;
     }
 //Remove the old items from the list
 itemList.clear();
 //Force it setup the list again
 prepareArrayLits();
 //Tell the adapter to update the view
 adapter.notifyDatasetChanged();
 }

このadapter.notifyDatasetChanged()呼び出しは、アダプターにを更新するように指示しListViewます。

ちなみに、この道を進むことはお勧めしません。ViewPagerこれを、各日付がaTabで、以下のコンテンツが。で​​ある場所に変換することをお勧めしますListFragmentここViewPagerでサポートjarについて読むことができます。

于 2012-07-20T22:44:59.503 に答える
1

アダプタを正確に実装する方法はわかりませんがyourAdapter.notifyDataSetChanged()、リストの内容が変更されたときに電話をかけましたか?

于 2012-07-20T22:44:19.587 に答える