2013-05-29 64 views
0

我正在編寫一個由RCU控制的Android應用程序,而不是觸摸事件/手指。該RCU具有UP,DOWN,LEFT,RIGHT和OK鍵(簡化)。這意味着OK按鈕在當前高亮顯示的圖形對象上處理。例如,想想一下舊的DVD播放器的界面。ListView - 顯示其他顏色的最頂端的項目

我想調整ListView爲此目的。說我想提出的5個選項垂直列表:

  • 是(紅色)
  • 也許(白色)
  • 當然(白色)
  • 可能(白色)
  • 從不(白色)

最初,第一個選項是,應該使用某種顏色(高亮/對焦顏色),而其他4個選項使用另一種顏色(默認顏色)。

當用戶按下UP時,Maybe被翻譯到頂部並以高亮/對焦顏色顯示;是的是在列表的底部添加,並顯示在默認的顏色:

  • 也許(紅色)
  • 當然(白色)
  • 可能(白色)
  • 從不(白色)
  • 是(白色)

可能的選項經由ArrayAdapter提供到ListView:

public class DetailOptionsItemAdapter extends ArrayAdapter<String> { 
     public DetailOptionsItemAdapter(Context context, String[] options) { 
      super(context, R.layout.options, options); 
     } 
    } 

在類的構造器,其導出的ListView:

setAdapter(new DetailOptionsItemAdapter(getContext(), new String[]{"Yes", ...}))); 

我的佈局(R.layout.options)被定義爲以下:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:textColor="@color/white" 
    android:textColorHighlight="@color/red" 
    android:includeFontPadding="true" 
    android:ellipsize="end" 
    android:singleLine="true"/> 

當UP或DOWN被接收時,我翻譯要求索引頂端:

smoothScrollToPositionFromTop(... the index ..., 0); 

這個工程。到目前爲止,所有內容都以白色顯示,即默認顏色。

現在我需要插入,第一個項目總是紅色。我嘗試在舊的位置獲得視圖並給它一段時間的顏色,並在新的位置獲得視圖,並給它一個紅色,但沒有成功。

有什麼想法?謝謝!

+0

如果有人提供瞭解決問題的方法,那麼您應該選擇一個答案。 – natez0r

回答

1

我從來不是在代碼中設置文本顏色的巨大粉絲,但是你不能只是重寫適配器中的getView()方法,然後根據項目在列表中的位置,可以將文本顏色設置爲它?

即:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final TextView v = (TextView) super.getView(position, convertView, parent); 

     if (0 == position) { 
      v.setTextColor(blah); 
     } etc.. 
    } 
0

我做了小的演示,通過務實落實ListView的列表中選擇屬性。

您需要創建自定義適配器並在getView()方法內部檢查所選項目位置的條件併爲其應用顏色。

class Adapter extends BaseAdapter{ 
     private Context context; 
     private ArrayList<Setter> setter = new ArrayList<Setter>(); 
     private int pos; 

     public Adapter(Context context, ArrayList<Setter> list) { 
      setter = list; 
      this.context = context; 
     } 
     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return setter.size() != 0 ? setter.size() : 0; 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return setter.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     }   

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) {         
      Holder holder; 
      if (convertView == null){ 
       holder = new Holder(); 
       convertView = View.inflate(context, R.layout.item, null); 
       holder.txtID = (TextView) convertView.findViewById(R.id.text); 
       holder.txtName = (TextView) convertView.findViewById(R.id.text2); 
       convertView.setTag(holder); 
      }else{ 
       holder = (Holder) convertView.getTag(); 
      }   

      if (pos == position) { 
       convertView.setBackgroundColor(Color.MAGENTA); 
      }else{ 
       convertView.setBackgroundColor(Color.WHITE);     
      }   

      holder.txtID.setText(setter.get(position).getId()); 
      holder.txtName.setText(setter.get(position).getName());    

      convertView.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) {    
        pos = position;      
        notifyDataSetChanged(); 
       } 
      });   
      return convertView; 
     }  

    static class Holder{ 
     TextView txtID; 
     TextView txtName; 
    } 
}