2014-09-10 57 views
0

我有一個自定義listView與一些意見(如textView和imageView)在其中。 我想在獲取焦點時更改列表項的背景顏色。 我已經爲我的轉換視圖設置了OnfocusChange,但它不起作用。 這是我持有人類別:ListItem焦點變化

private class Holder { 
    ImageView iconImage; 
    TextView titleText ; 
    TextView costText ; 
    } 

和getView方法:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final Item item = item.get(position); 

    final Holder temp; 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.list_item, null); 
     temp = new Holder(); 
     temp.iconImage = (ImageView) convertView 
       .findViewById(R.id.iconImageView); 

     temp.titleText = (TextView) convertView 
       .findViewById(R.id.titleTextView); 
     temp.costText = (TextView) convertView 
       .findViewById(R.id.costTextView); 

     convertView.setTag(temp); 
    } else { 
     temp = (Holder) convertView.getTag(); 
    } 
    temp.titleText.setText(item.getItemTitle()); 
    //this focus listener doesn't work. 
    convertView.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus) { 
       temp.titleText.setBackground(context.getResources() 
         .getDrawable(
           R.drawable.green_background)); 

      } else { 
       temp.titleText.setBackground(context.getResources() 
         .getDrawable(R.drawable.black_background)); 
      } 
     } 
    }); 

} 

我怎麼能設置OnFocusChange聽衆在我的列表視圖每個列表項?

+0

你的這段代碼應該這樣做,如果你將此適配器添加到你的列表視圖 – Metehan 2014-09-10 11:38:02

回答

0

經過幾次搜索,我發現,使用重點在列表視圖爲了更改列表項目背景時,它的選擇,不是一個好的解決方案。因爲焦點不在列表視圖中,而是在到達屏幕末尾之後。 事實上,如果你爲你的listView設置onFocusChange偵聽器,它不會再向下滾動(當然鍵盤),解決這個問題的更好的解決方案是setOnItemSelected。 如果您想了解該解決方案的更多細節,你可以看看這個問題:

Programmatically select item ListView in Android

附加信息: 我開發電視應用程序,並沒有觸摸screen.I必須處理所有鍵盤事件。所以也許這個問題不會發生在普通應用程序開發者身上

0

您是否嘗試將focusable和focusableintouchmode設置爲true?

android:focusable="true" 
android:focusableInTouchMode="true" 

並嘗試將textviews和imageview的focusable設置爲false。

+0

是的,我已經做到了。但是另一個問題發生。焦點只針對屏幕中顯示的項目和列表視圖中未顯示的所有其他項目,無法獲得焦點。當我使用鍵盤進入列表時,焦點不會停留在listView中。實際上,當它到達位於屏幕底部的項目時,listView失去焦點並且不會向下滾動。 – 2014-09-13 10:25:37