ListItem焦点更改

时间:2014-09-10 11:33:37

标签: java android android-listview

我有一个带有一些视图的自定义listView(如textView和imageView)。 我想在获得焦点时更改列表项的背景颜色。 我已经为我的转换视图设置了OnfocusChange,但它不起作用。 这是我的持有人类:

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侦听器?

2 个答案:

答案 0 :(得分:0)

您是否尝试将focusable和focusableintouchmode设置为true?

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

并尝试将textviews和imageview的焦点设置为false。

答案 1 :(得分:0)

经过几次搜索后,我发现,在列表视图中使用焦点以便在选择列表项背景时更改,这不是一个好的解决方案。因为焦点不会停留在列表视图中,在它到达屏幕末尾之后。 事实上,如果你为listView设置onFocusChange监听器,它不会再向下滚动(当然是用键盘),解决这个问题的更好的解决方案是setOnItemSelected。 如果您想了解有关该解决方案的更多详细信息,可以查看以下问题:

Programmatically select item ListView in Android

其他信息: 我正在开发一个电视应用程序,没有触摸屏。我必须处理所有键盘事件。因此,普通应用程序开发人员可能不会遇到此问题。