2014-09-10 81 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