通過實踐發現,尚大大在判斷”上一頁“按鈕和”下一頁按鈕“是否可用的地方,有問題:
原代碼:
public void checkButton(){ //索引值小于等于0,表示不能向前翻頁了,以經到了第一頁了。 //將向前翻頁的按鈕設為不可用。 if(index <=0){ btnLeft.setEnabled(false); } //值的長度減去前幾頁的長度,剩下的就是這一頁的長度,如果這一頁的長度比View_Count小,表示這是最后的一頁了,后面在沒有了。 //將向后翻頁的按鈕設為不可用。 else if(data.length - index*VIEW_COUNT <= VIEW_COUNT){ btnRight.setEnabled(false); } //否則將2個按鈕都設為可用的。 else { btnLeft.setEnabled(true); btnRight.setEnabled(true); }原代碼在兩種情況下出現bug:
1.當數據長度<VIEW_COUNT時,出現問題
2、數據長度<2*VIEW_COUNT時(即只能顯示兩頁),也會出現問題
修改后代碼:
public void checkButton() { // 當本頁是第一頁時(index=0),數據條數少于每頁的顯示數目時,上一頁按鈕和下一頁按鈕都不能用 if (index <= 0 && data.length <= VIEW_COUNT) { btnLeft.setEnabled(false); btnRight.setEnabled(false); // 當本頁是第一頁時(index=0),并且數據個數大于每頁的顯示數目時,上一頁按鈕不可以用,下一頁按鈕可以用 } else if (index <= 0 && data.length > VIEW_COUNT) { btnLeft.setEnabled(false); btnRight.setEnabled(true); } // 值的長度減去前幾頁的長度,剩下的就是這一頁的長度,如果這一頁的長度比View_Count小,表示這是最后的一頁了,后面在沒有了。 // 將向后翻頁的按鈕設為不可用。 else if (index > 0 && (data.length - index * VIEW_COUNT) <= VIEW_COUNT) { btnRight.setEnabled(false); btnLeft.setEnabled(true); } // 否則將2個按鈕都設為可用的。 else { btnLeft.setEnabled(true); btnRight.setEnabled(true); }修改完了之后,就不會出現問題了(待會的放的項目代碼中,初始化數據時,有這兩種情況,改一下注釋運行一下即可知道問題在哪里)
代碼寫進項目時注意:
1.第一次檢測button的可用性時,將checkButton();放在 listview綁定adapter的代碼下面
2.在Listview界面下面,加上兩個button時,很容易出現listView將button給覆蓋掉,解決這個問題,會在后面的博客中寫出來解決方法。
3.在項目中引用時,當有返回上一頁的按鈕時,在onClick()事件時,在里面放一句:index=0; 這樣在重新點擊本頁面時,數據會重新刷新,顯示第一頁,否則將停留在上次的頁面!
提示:下載代碼前看一下下面的補充
修改后項目源碼
原作者項目源碼下載
2014年10月11日11:49:47
注意:在項目后來的測試中,還發現一個問題:
在兩個Button(上一頁,下一頁)的點擊事件中,缺少了一個判斷:即當界面中無加載數據時,應該將兩個Button都設置為不可點擊狀態。
當缺少了這個判斷時,造成的后果是:當界面無數據,點擊這兩個按鈕,程序會停止運行!
修改如下:
1 cl = new Button.OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 // 加一個判斷,假如沒數據,兩個button都是灰色的 5 if (listDatas.size() == 0) { 6 btnLeft.setEnabled(false); 7 btnRight.setEnabled(false); 8 } else { 9 switch (v.getId()) {10 case R.id.queren_btnLeft:11 leftView();12 break;13 14 case R.id.queren_btnRight:15 rightView();16 17 break;18 }19 }20 }21 22 };新聞熱點
疑難解答