如何使Listview更改内容(数组)和onitemclick函数

时间:2015-07-19 18:42:50

标签: android listview android-arrayadapter

final String[] genre = {"a", "b", "c", "d", "e","f","g","h","i","j" };
final String[] genre1 = {"...","0","1","2"};
final String[] genre2 = {"...","3","4","5"};
static int listint = 0;

...

@Override
public Object instantiateItem(ViewGroup container, int position) {        

  if(position==0) {                
    View view = getActivity().getLayoutInflater().inflate
   (R.layout.pager_item_test, container, false);   
    container.addView(view); 
    ListView ListViewOnScreen = (ListView)container.findViewById(R.id.ListViewOnScreen);        

      if (listint == 0) {            
        ArrayAdapter arrayadaptermain = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, genre);
        ListViewOnScreen.setAdapter(arrayadaptermain);
        ListViewOnScreen.setOnItemClickListener(onitemclicklistenermain);

      } else if (listint == 1) { 
       ArrayAdapter arrayadapter1 = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, genre1);
        ListViewOnScreen.setAdapter(arrayadapter1);
        ListViewOnScreen.setOnItemClickListener(onitemclicklistener1);}


       return view;
}

...

}


public AdapterView.OnItemClickListener onitemclicklistenermain = new AdapterView.OnItemClickListener(){

   @Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long l_position) { 
     String tv = (String)parent.getAdapter().getItem(position);
     Toast.makeText(getActivity(), tv + " printed from main, listint = " + listint, Toast.LENGTH_SHORT).show(); 


     switch(position){   
        case 0:  listint = 1;  break;               
 }}};


public AdapterView.OnItemClickListener onitemclicklistener1 = new AdapterView.OnItemClickListener(){ 
   @Override        
   public void onItemClick(AdapterView<?> parent, View view, int position,                                    long l_position) {   
     String tv = (String)parent.getAdapter().getItem(position);  
     Toast.makeText(getActivity(), tv + " printed from 1, listint = " +  listint, Toast.LENGTH_SHORT).show();   

     switch(position){                    
        case 0: listint = 0; break;
 }}};`

这是SlidingTabsBasicFragment(来自SlidingTabsBasic)的一部分,其页面是listview。

我正试图让这个程序像这样:

- 首先,ListViewOnScreen显示String []流派。

- 当ListViewOnScreen显示String []类型时,单击位置0(“a”)将使ListViewOnScreen显示String [] genre1。

- 当ListViewOnScreen显示String [] genre1时,单击位置0(此处为“...”)将使ListViewOnScreen再次显示String []类型。

我认为这段代码可行。但无论listint是什么,ListViewOnScreen都会始终显示流派(而不是genre1)。

例)第一次点击'a':     Toast:从main打印,listint = 0     数组没有变化,仍显示“a”,“b”,......

Clicking 'a' second time:
Toast: a printed from main, listint = 1
Still No change in array.

如何更改代码才能正常工作?

1 个答案:

答案 0 :(得分:0)

我想将此作为评论发布,但我没有必要的帖子发布,所以我将其添加为答案。从您在此处发布的代码看来,您似乎正在使用PageAdapter instantiateItem函数。好吧,从输出中可以看出,instantiateItem函数只为一个页面调用一次,该页面设置了具有内容genre []并显示它们的初始适配器。下次按“a”时,页面将被重用而不是新创建,因此不会再次调用instantiateitem函数。那么,instantiateItem可能不是切换适配器的地方吗?