2010-10-27 43 views
0

當前我的ListView填滿了給定的String [],但我想在ListView項目上交替一些樣式。 發生了一些奇怪的事情(我肯定錯過了一些明顯的東西); ListView索引是不固定的,樣式不像假設的那樣交替。使用擴展ArrayAdapter的ListView上的交替樣式<E>隨機結果

我的代碼如下:

package com.blah.blah; 


import android.app.ListActivity; 
import android.content.Context; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class Help extends ListActivity { 
    public class CustommAdapter<E> extends ArrayAdapter<E>{ 


     public CustommAdapter(Context context, int textViewResourceId, 
       E[] objects) { 
      super(context, textViewResourceId, objects); 

     } 

     public View getView(int position, View convertView, ViewGroup parent){ 
if(convertView == null){ 
    LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    convertView = inflater.inflate(R.layout.help_item, null); 
} 

if(convertView != null){ 
    TextView tvfila = (TextView) convertView.findViewById(R.id.tvfila);   
       if(position % 2 == 0){ 
       convertView.setBackgroundColor(Color.LTGRAY); 

       tvfila.setTextColor(Color.BLACK); 

      } 
        } 
      return super.getView(position, convertView, parent); 

     } 
     @Override 
     public boolean areAllItemsEnabled() { 

      return false; 
     } 
     @Override 
     public boolean isEnabled(int position) { 
      if(position % 2 == 0){ 
      return false; 
      }else{ 
       return true; 
      } 
     } 
    } 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 

      super.onCreate(savedInstanceState); 
      String[] questions = getResources().getStringArray(R.array.help_questions); 
      String[] answers = getResources().getStringArray(R.array.help_answers); 
      String[] DATA = new String[questions.length + answers.length]; 
      int dataindex = 0; 
      for (int i = 0; i < questions.length; i++){ 
       DATA[dataindex] = questions[i]; 
       dataindex++; 
       DATA[dataindex] = answers[i]; 
       dataindex++; 
      } 
      setListAdapter(new CustommAdapter<String>(this, R.layout.help_item, DATA)); 
      ListView lv = getListView(); 
      lv.setTextFilterEnabled(true); 
     } 


} 

的問題是: 是有辦法來固定的ListView索引,這樣我可以使用if(位置%2 == 0)以分離和賠率evens匹配問題和解答

注意:
來自資源的兩個StringArrays具有相同的大小。
的help_item.xml只包含一個TextView

圖片,展示了問題:
預期的行爲

Expected behavior

這個代碼

alt text

回答

3

的問題是在這裏:

if(position % 2 == 0){ 
    convertView.setBackgroundColor(Color.LTGRAY); 
    tvfila.setTextColor(Color.BLACK); 
} 

你沒有相應的else語句。因此,您不會將值重新設置爲奇數行的值。回想一下,Android ListView重用他們的意見(Android Click on listItem checks wrong checkbox),你可能會開始明白爲什麼你會得到奇怪的行爲。

+0

這很有道理。我認爲這可能是答案。 – blindstuff 2010-10-27 22:16:38

+0

這正是我說的原因:QUOTE:「(我肯定錯過了一些明顯的東西)」。謝謝I82Much,你救了我! – 2010-10-27 23:15:42

+0

很高興我可以得到一些幫助 – I82Much 2010-10-28 02:18:16

0

不知道這是問題的結果,但不會返回super.getView(position, convertView, parent);

只是return convertView

此外,您應該將convertView投射到您實際期望的任何視圖。

0

我只想說,創建一個容器類,它具有一個字符串和一個布爾型標誌,而不是評估位置只是評估isQuestion標誌。並保持一個陣列。

相關問題