Android/ListView : Select first item after loading datas

标签 android listview gmail tablet

编辑 我必须告诉你,我的 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());

                }
            }

        }

单击该项目并填充我的详细信息 View ...

我尝试将我的 Fragment 更改为 ListFragment 但没有任何改变...

编辑结束

对于我的应用程序,我创建了一个 UI(适用于平板电脑),其中左侧屏幕上有 ListView,右侧有一个详细 View 。 我想在加载数据后自动选择第一项,并查看详细信息。

我可以通过调用 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) 为 null ,仅当我保留 perforItemClick 时。如果我只是评论这一行,然后单击一行,该行就会像 Gmail 应用程序中一样突出显示。

你能帮助我并告诉我我做错了什么吗?

提前致谢

最佳答案

我找到了解决问题的方法,如果有开发人员遇到同样的情况,我会将解决方案发布在这里。

我在我的适配器中创建了一个方法,该方法必须激活该位置的标志,并且在我的 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);
    }
}

谢谢!

关于Android/ListView : Select first item after loading datas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10296846/

相关文章:

android - Facebook 深层链接始终打开 Google Play 商店

c# - 如何使用搜索字符串搜索数据表中的行?

email - 优先级 : bulk header on e-mail messages 的作用是什么

android - 如何通过编码将图像和.txt(多个文件)文件附加到gmail?

android - Firebase IOS UTM 安装跟踪

android - Dropbox Sync API Android - 更新缓存文件

android 使用自定义适配器更改 ListView 中的列表项

java - 如何在listView适配器内的onclicklistener中获取textView文本

html - Gmail 电子邮件标记不起作用

java - GdxRuntimeException : File not found