修改 我必须告诉你,我的ListView是由AsyncTask填充的。
当我使用onPostExecute方法时,下面的代码工作正常:
synchronized (mListView) {
if(mFeeds==null || mFeeds.size()==0){
Utils.Log("mFeeds empty");
_this.setListShown(false);
}else{
Utils.Log("mFeeds Full");
_this.setListShown(true);
mListView.setAdapter(new ListFeedsAdapter(mActivity,mFeeds));
mListView.notifyAll();
NewsFeedsDetailViewPagerFragment fragment = (NewsFeedsDetailViewPagerFragment) getFragmentManager()
.findFragmentById(R.id.feeddetailViewPagerFragment);
if(fragment!=null){
mListView.performItemClick(null, 0, mListView.getFirstVisiblePosition());
}
}
}
单击该项目,我的详细信息视图将填充...
我尝试将Fragment更改为ListFragment,但没有任何改变......
编辑结束
对于我的应用程序,我创建了一个UI(用于平板电脑),左侧屏幕显示ListView,右侧显示详细视图。 我想在加载数据后自动选择第一个项目,并查看详细信息。
我可以通过调用mListView.performItemClick(null, 0, mListView.getFirstVisiblePosition());
和
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
NewsFeedsDetailViewPagerFragment fragment = (NewsFeedsDetailViewPagerFragment)
getFragmentManager().findFragmentById(R.id.feeddetailViewPagerFragment);
if(fragment!=null){
fragment.setFeedDetail(mFeeds, arg2);
}
});
现在,我要做的是突出第一项,如平板电脑的Gmail应用程序。 我在每一行使用选择器背景,如:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/selected_item_background" android:state_activated="true"/>
<item android:drawable="@drawable/pressed_item_background" android:state_activated="false" android:state_pressed="true"/>
<item android:drawable="@drawable/pressed_item_background" android:state_focused="true"/>
<item android:drawable="@drawable/unselected_item_background"/>
</selector>
当我在onItemClick监听器中使用mListView.getChildAt(arg2).setActivated(true);
时,我有一个NullPointerException,因为mListView.getChildAt(arg2)
为空,只有当我保留perforItemClick时。如果我只是评论此行,并点击一行,则此行会在Gmail应用程序中突出显示。
你能帮助我并告诉我我做错了什么吗?
提前感谢
答案 0 :(得分:3)
我找到了解决问题的方法,如果开发人员处于相同的情况,我会在此处发布解决方案。
我在我的适配器中创建了一个方法,该方法必须激活位置,在我的getView方法中,我只是将当前位置与标志进行比较并激活或不激活行:
((ListFeedsAdapter) mListView.getAdapter()).setItemSelected(mOldPosition);
在适配器中:
private int mItemSelected = -1 ;
public void setItemSelected(int position){
mItemSelected=position;
}
public View getView(int position, View convertView, ViewGroup parent){
//some code ....
if(mItemSelected==position){
convertView.setActivated(true);
}else{
convertView.setActivated(false);
}
}
谢谢!
答案 1 :(得分:2)
我认为这是因为你在performItemClick()
方法中传递了null:
mListView.performItemClick(null, 0, mListView.getFirstVisiblePosition());
尝试类似:
mListView.performItemClick(mListView.getChildAt(0), 0, mListView.getFirstVisiblePosition());
答案 2 :(得分:0)
mListView.setSelection(0)
答案 3 :(得分:0)
我知道答案已被接受,但如果这有助于某人。
如果要在列表加载时自动选择/播放列表视图的第一个视图,则应访问此链接。我正在寻找相同的东西,并找到了等待列表填充的post()方法。
以下是我的问题链接: - Accessing list's first item when list view is loaded in android
以下是其解决方案链接: - smoothScrollToPosition after notifyDataSetChanged not working in android
然而,在getView()中编写任何代码都会花费你,因为getView被重复调用。 感谢。