java - Android - 在整个类中使用和更改数组

标签 java android arrays

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

enter image description here

因此,默认情况下,每次打开应用程序时,都会显示“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;
              [...]

        }



    }

我尝试过什么:

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

  • 我尝试设置 getter 和 setter。但也没有成功

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

最佳答案

所以我猜测当您单击顶部的日期时,下面的内容会发生变化。有多种方法可以做到这一点。要解决当前代码中的当前问题,您需要执行以下操作: 根据您显示的代码,我假设您在某处有一行代码,如下所示: 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 的信息。 .

关于java - Android - 在整个类中使用和更改数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11587786/

相关文章:

java - 安卓/java : use something else rather then ObjectInputStream to load an object

php - 将具有单个键和字符串值的数组拆分为具有多个键和值的数组

Java 控制台应用程序清理

java - 如何将UV纹理从 blender 加载到opengl android java

android - 日志 : column _id does not exist (SQL related)

android - Android 平台上是否有 OpenGL ES 2.0 的 java 绑定(bind)?

android - 有没有办法将 youtube 360​​ 视频嵌入到 Android 中

python - 使用 mplot3d 绘制二维数组

ruby - 正则表达式匹配多个字符串 - Ruby

Java mockito 模拟集