Android 当进入列表视图屏幕时,如何在默认情况下使列表视图中的第一项成为焦点?
在我的列表视图中,我必须使第一个项目成为焦点。在我的应用程序中,我已经完成了D-PAD实现,如果我找到了初始焦点,我将使用D-PAD导航焦点。 我尝试使用Android 当进入列表视图屏幕时,如何在默认情况下使列表视图中的第一项成为焦点?,android,android-listview,android-drawable,android-selector,Android,Android Listview,Android Drawable,Android Selector,在我的列表视图中,我必须使第一个项目成为焦点。在我的应用程序中,我已经完成了D-PAD实现,如果我找到了初始焦点,我将使用D-PAD导航焦点。 我尝试使用setSelection(position)此代码无效 我发现listview有一些奇怪的行为,默认情况下它总是聚焦-1位置。我不知道为什么?请澄清这种行为 我的列表视图项是从服务器获取加载。所以,当我必须进行setSelection()时,如何检查setAdpter任务是否完成 @Override public final View
setSelection(position)
此代码无效
我发现listview有一些奇怪的行为,默认情况下它总是聚焦-1位置。我不知道为什么?请澄清这种行为
我的列表视图项是从服务器获取加载。所以,当我必须进行setSelection()时,如何检查setAdpter任务是否完成
@Override
public final View getView(final int position, final View convertView, final ViewGroup parent) {
final LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rowView = inflater.inflate(R.layout.list_item_faq, parent,
false);
final TextView textView = (TextView) rowView
.findViewById(R.id.faqlist_text);
textView.setText("text");
textView.setMaxLines(2);
textView.setEllipsize(android.text.TextUtils.TruncateAt.END);
return rowView;
}
adapter.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/sel_list_item" //this is selector
android:gravity="center_vertical"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:layout_margin="2dp"
android:layout_gravity="center"
android:src="@drawable/cc_question_mark" />
<TextView
android:id="@+id/faqlist_text"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginLeft="20dp"
android:gravity="center_vertical"
android:textColor="#6f6f6f"
android:textSize="22sp" />
</LinearLayout>
请提出任何使第一项成为焦点的想法。在使用集合选择之前,您可能需要稍微延迟一点时间
listView.postDelayed(new Runnable() {
@Override
public void run() {
listView.setSelection(0);
}
}, 500);
无需将post与listview一起使用。将数据添加到列表中后,您只需使用
listview.setSelection(0)
,如果您已尝试list.setSelection(position)
,请尝试
list.setItemChecked(0, true);
我希望它对你有用。但请记住,在主线程或ui线程中更新此内容
更新
也试试这个
list.setFocusable(true);
list.requestFocus();
更新1
当您从数据中获取所有列表时,请调用
adapter.notifyDataSetChanged();
list.setSelection(position);
试试这个
getView(位置,null,null).performClick() 您的
列表视图是否可聚焦
在onResume()中执行
您能给我看一下适配器中的代码getview方法吗?
我认为您在适配器中设置了静态viewholder。
如果(convertView==null)
条件,则应删除。
看起来像:
// if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(
R.layout.baseadapter_dropdown_layout, null);
holder.img = (ImageView) convertView.findViewById(R.id.imageView1);
convertView.setTag(R.layout.baseadapter_dropdown_layout, holder);
// } else {
// holder = (ViewHolder) convertView
// .getTag(R.layout.baseadapter_dropdown_layout);
// }
尝试执行以下操作:
public void onStart() {
super.onStart();
onListItemClick(listView, findViewById(android.R.id.content), 1, 0);
}
public void setActivateOnItemClick(boolean activateOnItemClick) {
listView.setChoiceMode(activateOnItemClick ? ListView.CHOICE_MODE_SINGLE
: ListView.CHOICE_MODE_NONE);
}
在onResume()中
mListView.setSelection(position);
或
也
在输入硬编码位置之前,还要尝试管理空检查。使用performItemClick。如果定义了侦听器,它将调用该侦听器。这对我很有吸引力
int setPosition = 0; // Your default position. Any value less than your list size.
int ignoreId = 0; // We ignore the row id of the item that was clicked.
yourListView.setItemChecked(setPosition, true);
yourListView.performItemClick(yourListView.getSelectedView(), setPosition, ignoreId);
我也使用了setselection,如果我给setselection(10),第10项将是屏幕的第一项,但焦点没有发生。我已经提到setselection不是那样工作的,所以,我需要一些其他方法。你把延迟放在哪里了?在onResume中,您可以添加更多的活动代码吗?如果它不起作用,肯定还有其他问题。问题已被更新,请在此基础上更新答案。如何从服务器加载数据?您正在使用AsyncTask吗?已尝试使用setItemChecked(0,true),它不工作。list.setFocusable(true);requestFocus();和list.setFocusableInTouchMode(true);requestFocus();trie,你想做的事情不起作用……也许可以用其他方式来做,所以请再解释一下。例如,我有两个屏幕,第一个屏幕有一个按钮,第二个屏幕是列表视图。单击第一个屏幕按钮将进入列表视图,从那里我必须关注第一个项目android:background=“?android:activatedBackgroundIndicator”在项目列表布局中设置,然后重试列表。setItemChecked(0,true);第一项是指listview中的第一行吗?能否删除android:background=“@drawable/sel_list_item”
并替换为:listview.setSelector(getWallpar());listview.setSelection(0)代码>在“活动”中。若选择列表中的行,手机壁纸将为选择器设置背景。您将知道选择了哪一行。是否要突出显示选定的项目?还是希望焦点视图显示选定的项目?你在尝试吗?我的代码没有继承列表活动,它只是带有活动
mListView.setSelection(listview.getAdapter().getCount()-1);
mListView.requestFocus();
int setPosition = 0; // Your default position. Any value less than your list size.
int ignoreId = 0; // We ignore the row id of the item that was clicked.
yourListView.setItemChecked(setPosition, true);
yourListView.performItemClick(yourListView.getSelectedView(), setPosition, ignoreId);