我花了大约 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;
[...]
}
}
我尝试过什么:
我设置了全局类,但不起作用
我尝试设置 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/