2017-02-25 90 views
0

我正在使用具有可展開動畫的正常ListView(mItemsList)(from this tutorial)。它的工作原理是,當我點擊列表項時,它展開並顯示這個項目的細節。展開自定義列表中的所有列表項(android)

mItemsList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, final View view, int position, long id) { 

      View details = view.findViewById(R.id.details); 

      // Creating the expand animation for the item 
      ExpandAnimation expandAni = new ExpandAnimation(details, 500); 

      // Start the animation on the toolbar 
      details.startAnimation(expandAni); 
     } 
    }); 

我創建了一個showDetails按鈕,我想在點擊按鈕後展開所有列表項,但我完全丟失了。下面的代碼不起作用

mShowDetailsButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      for (int i = 0; i < mItemsList.getAdapter().getCount(); i++) { 
       View details= v.findViewById(R.id.details); 
       details.startAnimation(new ExpandAnimation(details, 500)); 
      } 
     } 
    }); 

你能幫我嗎?

這裏是我的list_item xml file

回答

0

也許做了類似的方法類似下面的自動點擊項目逐個打開所有listciew。

mShowDetailsButton.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     for (int i = 0; i < mItemsList.getAdapter().getCount(); i++) { 
      listView.performItemClick(
       getViewByPosition(i), 
       i, 
       listView.getAdapter().getItemId(i));    
     } 
    } 
}); 
//the listview getChildAt only return the view(item) that is visible, 
//therefore add a function to get invisible view together 
public View getViewByPosition(int position) { 
    int firstItemPosition = listView.getFirstVisiblePosition(); 
    int lastItemPosition = firstItemPosition + listView.getChildCount() - 1; 

    if (position < firstItemPosition || position > lastItemPosition) {//is invisible 
     return listView.getAdapter().getView(position, null, listView); 
    } else { 
     int childIndex = position - firstItemPosition;//is visible 
     return listView.getChildAt(childIndex); 
    } 
} 

你做的一個不行,因爲視圖引用了mShowDetailsButton,而不是mItemsList。因此,您無法找到ID的R.id.details。

mShowDetailsButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) {//<-- this view not referring to mItemsList 
    } 
}); 
+0

謝謝!我試過這個,但是我得到NullPointerException – Anna

+0

你可能會發布錯誤日誌,所以我們可以找出哪一行是問題 – CbL

+0

進程:pm.anna.takecare,PID:17940 java.lang.NullPointerException at pm.anna.takecare。 CareActivity $ 11.onClick(CareActivity.java:276) at android.view.View.performClick(View.java:4496) at android.view.View $ PerformClick.run(View.java:18603)... etc 這裏是我的[活動文件](https://github.com/anna-wro/takecare/blob/master/app/src/main/java/pm/anna/takecare/CareActivity.java#L276) – Anna