如何在listview项目中设置焦点?

时间:2012-12-01 06:45:40

标签: android listview focus

enter image description here我必须将重点放在listview项目上。 ListView由TextView组成。 我希望将焦点设置在listview项目上的点,此时我有该项目的位置。

我尝试过setSelectio(pos),其中pos是listview项的位置,但是这会导致将项目的位置设置在屏幕顶部的位置。

请建议我如何继续。

   builder.setPositiveButton(R.string.save,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        Log.d("@gaurav", "changeText is not null");

                        if (null != changeText) {
                            Log.d("@gaurav", "changeText is not null");
                            if (!(changeText.getText().toString().equalsIgnoreCase(""))) {
                                myList
                                        .set(pos, changeText.getText()
                                                .toString());
                                adapter.notifyDataSetChanged();
                                setListAdapter(adapter);
                            }
                        } else {
                            Log.d("@gaurav", "changeText is null");
                        }
                        getListView().setFocusableInTouchMode(true);
                        getListView().setSelection(pos);
                        getListView().requestFocus();
                    }

                });

2 个答案:

答案 0 :(得分:5)

我认为您希望根据您的要求突出显示特定的列表项。因此,如果项目在屏幕中不可见,则无法设置焦点。我对吗 ?如果这是您的问题,您可以使用以下方法public void smoothScrollToPosition (int position) Added in API level 8滚动到该特定位置,然后使用setSelection()方法

答案 1 :(得分:3)

如果你想在ListView的特定索引上设置焦点/颜色,你应该试试这个,它运作良好。

list.post(new Runnable() {
    @Override
    public void run() {
        list.setSelected(true);
        list.getChildAt(0).setBackgroundColor(Color.BLACK);
        list.getChildAt(1).setBackgroundColor(Color.BLUE);
        firstListItemPosition = firstListItemPosition +1;
        Log.v("firstListItemPosition", "firstListItemPosition ");
    }                   
});


firstListItemPosition = list.getFirstVisiblePosition();