android游标适配器在横向模式下显示错误数据

时间:2013-09-13 19:25:03

标签: android android-listview simplecursoradapter android-listfragment android-cursoradapter

我有一个应用程序,它使用带有标签导航的操作栏,通过自定义光标适配器显示列表视图,然后在单击列表视图项时显示详细数据。当我的设备处于纵向方向时,一切正常。

当我的设备处于横向时,我的问题就出现了。当我单击某个项目时,详细视图会在可见列表的顶部显示该项目。即:项目Accolate - Actonel在列表中可见。无论我点击哪个项目,都会显示Accolate。

截图:

landscape screenshot

这是我的onListItemClick方法:

public void onListItemClick(ListView parent, View v, int position, long id) { 
mCurCheckPosition = position;
items.setSelectedPosition(position, cursor);
}

我正在使用片段查看我的listview和detailview。从肖像到风景的唯一区别是我在横向模式下连接到一个框架。这是我的适配器代码:

    public class MyListAdapter extends SimpleCursorAdapter {

    @SuppressWarnings("deprecation")
    public MyListAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to) {
        super(context, layout , cursor, from, to);
    }

    public void setSelectedPosition(int position, Cursor cursor) {

        // create data array
        String [] data = new String[] { 
                cursor.getString(5),
                cursor.getString(6), 
                cursor.getString(7),
                cursor.getString(8), 
                cursor.getString(9), 
                cursor.getString(10),
                cursor.getString(4)
        };

        // create the detail fragment
        Bundle bundle = new Bundle();
        FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();

        if (mDualPane == false) {
            DetailFragment detailFragment = new DetailFragment();
            bundle.putStringArray("Data", data);
            detailFragment.setArguments(bundle);
            ft.replace(android.R.id.content, detailFragment);   
            ft.addToBackStack(null);           
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
            ft.commit();
        } else {
            DetailFragment detailFragment = new DetailFragment();
            bundle.putStringArray("Data", data);
            detailFragment.setArguments(bundle);
            ft.replace(R.id.details, detailFragment);           
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
            ft.commit();
        }
    }


    @Override
    public void bindView(View view, Context context, Cursor cursor) {

        // create the title textview
        TextView title = (TextView) view.findViewById(R.id.item_title);
        title.setText(cursor.getString(4));

    }
}       

我在点击过程中记录了位置,它与我光标中的正确记录匹配,但是适配器显示错误的数据。

任何想法或建议将不胜感激。谢谢你提前。

1 个答案:

答案 0 :(得分:0)

我发现了导致我问题的原因。我的ListFragment中有以下命令:

 getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

我认为这与在listview中标记行

有关