Android - 在全班中使用和更改Array

时间:2012-07-20 22:33:49

标签: java android arrays

我试图解决这个问题大约2个小时。所以我很高兴能得到每一个答案。 我有一个自定义ListViewAdapter,它从数组中获取他的内容。但我有19个阵列,我想根据用户点击的日期更改内容(因此数组)(顶部有一个日历,有19个日期)。 这是一张图片:

enter image description here

因此,默认情况下,您打开应用程序时会显示“date_1”数组中的内容(对于日历中的25.)。当您点击另一个日期时,将显示属于该日期的数组中的内容(例如26. - > date_2,27.date_3等)。 每个Array都必须从资源加载并保存在单个Array Variable中。

所以我的问题: 我无法更改数组。这是我的代码:

// 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;
              [...]

        }



    }

我尝试了什么:

  • 我设置了一个全局类,但它不起作用

  • 我试图设置getter和setter。但也没有用

我不知道如何解决这个问题。感谢所有可能的解决方案,谢谢。

2 个答案:

答案 0 :(得分: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,其中每个日期为Tab,下面的内容为ListFragment。您可以阅读ViewPager和支持jar here

答案 1 :(得分:1)

我不知道你是如何完全实现你的适配器但是当你的列表内容被更改时你是否打电话给yourAdapter.notifyDataSetChanged()