0

我有一個ListView,我希望它每次點擊一個按鈕時移動到目標位置。如何使ListView通過按鈕正確移動到目標位置?

NextButton工作正常,但PrevButton存在問題。

每當我點擊PrevButton時,目標位置始終是新視圖滾動到的第一個位置。

例如, 如果設置這樣的:目標位置被滾動到

mListView.setSelection(5); 

後,將新的視圖將是 位置5,6,6,8,等等

如何我可以使它成爲新視圖的最後一個位置,例如位置1,2,3,4,5嗎?

我知道他們能做到這一點與默認圖庫應用

代碼:

PrevButton = (ImageButton) findViewById(R.id.Pre_Button); 
     PrevButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       ((BaseAdapter) mListView.getAdapter()).notifyDataSetChanged(); 
       mListView.setSelection(LastItemPos - 1); 
      } 
     }); 

NextButton = (ImageButton) findViewById(R.id.Next_Button); 
     NextButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       ((BaseAdapter) mListView.getAdapter()).notifyDataSetChanged(); 
       mListView.setSelection(LastItemPos + 1); 
      } 
     }); 

謝謝

+0

你的意思是說listview沒有滾動到那個位置嗎?還是想通過點擊按鈕listview應該滾動到那個請求的位置? – user1140237 2015-02-10 06:01:02

+0

@ user1140237,它會滾動到目標位置。問題在於目標位置滾動到該位置後,該位置始終是新視圖的第一個位置。謝謝 – 2015-02-10 12:07:51

回答

0

假設每次查看你在你的ListView將是相同的高度,所有你必須做的是弄清楚每個View有多高,然後將它除以ListView的高度。

找出一個視圖高度只是它充氣,以「未指定」 measurespec衡量它,然後獲取測量高度:

public int getItemHeight(ListView listView, int listViewItemId) { 
    MeasureSpec widthSpec = MeasureSpec.makeSpec(MeasureSpec.EXACTLY, listView.getWidth()); 
    MeasureSpec heightSpec = MeasureSpec.makeSpec(MeasureSpec.UNSPECIFIED, listView.getHeight()); 
    View listViewItem = LayoutInflator.from(context).inflate(R.layout.idOfListViewItem, listView, false); 
    listViewItem.measure(widthSpec, heightSpec); 
    return listViewItem.getHeight(); 
} 

然後,找出許多項目將如何定位在ListView。

int itemHeight = getItemheight(listView, R.layout.layoutIdOfItem); 
int numOfItems = itemHeight/listView.getHeight(); 

然後,當你設置的位置,只需減去位置的項目數。雖然你必須確保它不低於0.

int itemToScrollTo = 5 - numOfItems; 
if (itemToScrollTo < 0) { 
    itemToScrollTo = 0; 
} 
listView.setPosition(itemToScrollTo); 
+0

非常感謝DeeV的回答。你介意告訴我什麼R.layout.layoutIdOfItem是 - 我的MainActivity中有佈局嗎?謝謝 – 2015-02-10 16:19:28

+0

這是佈局文件的ID。您在ListView的適配器中膨脹一個視圖,對吧?這裏同樣的事情。如果以編程方式執行此操作,則可以在以編程方式創建視圖項目的適配器中創建實用程序方法。唯一重要的是你需要用來填充ListView的View。 – DeeV 2015-02-10 17:56:24

+0

哦,不,我很抱歉忘記提及我正在使用Lucasr的TwoWay-View。我認爲它與ListView類似,只不過它是水平滾動。我無法使用TwoWayView..setPosition(itemToScrollTo); :-(但是,我檢查了itemToScrollTo,它似乎給了我總共#個項目中的正確位置。你是否知道是否有另一種setPosition()方法?謝謝 – 2015-02-10 20:06:13

相關問題