android 一个列表项中光标的多行

标签 android listview simplecursoradapter

我有两个通过一个键连接的数据库:

Questions
-------------------
_id    text
1      Question 1
2      Questions 2

Answers
-------------------
_id    text    answered     question_id
1      Yes     200          1
2      No      100          1
3      Yes     30           2
4      No      260          2

我可以使用 SimpleCursorAdapter 完美地调用数据。但是,我想将所有问题和答案放在一个 ListView 中,其中一个列表项如下所示:

Question 1
Yes: 200
No: 100
____________

Question 2
Yes: 30
No: 260
____________

我应该怎么做?我做的最好的是:

Question 1
Yes: 200
____________

Question 1
No: 100
____________

Question 2
Yes: 30
____________

Question 2
No: 230

知道怎么做吗?我是否需要两个游标(一个用于遍历问题数据库,另一个用于使用第一个游标中的 question_id 遍历答案),或者我可以用一个游标来实现吗?我也考虑过用 TableLayout 来做,但未能正确插入一行。

希望有人能给我一些建议。

最佳答案

你可以引用这段代码,

public class CustomAdapter extends BaseAdapter {

        private Context mContext;
        private Cursor mCursor;

        // State of the row that needs to show separator
        private static final int SECTIONED_STATE = 1;
        // State of the row that need not show separator
        private static final int REGULAR_STATE = 2;
        // Cache row states based on positions
        private int[] mRowStates;

        public CustomAdapter(Context context, Cursor cursor) {
            mContext = context;
            mCursor = cursor;
            mRowStates = new int[getCount()];
        }

        @Override
        public int getCount() {
            return mCursor.getCount();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View view;
            boolean showSeparator = false;

            mCursor.moveToPosition(position);

            if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.contact_item, null);
            }
            else {
                view = convertView;
            }

            // Set contact name and number
            TextView contactNameView = (TextView) view.findViewById(R.id.contact_name);
            TextView phoneNumberView = (TextView) view.findViewById(R.id.phone_number);

            String name = mCursor.getString( mCursor.getColumnIndex(mProjection[0]) );
            String number = mCursor.getString( mCursor.getColumnIndex(mProjection[1]) );

            contactNameView.setText( name );
            phoneNumberView.setText( number );


            // Show separator ?

            switch (mRowStates[position]) {

                case SECTIONED_STATE:
                    showSeparator = true;
                    break;

                case REGULAR_STATE:
                    showSeparator = false;
                    break;

                default:

                    if (position == 0) {
                        showSeparator = true;
                    }
                    else {
                        mCursor.moveToPosition(position - 1);

                        String previousName = mCursor.getString(mCursor.getColumnIndex(mProjection[0]));
                        char[] previousNameArray = previousName.toCharArray();
                        char[] nameArray = name.toCharArray();

                        if (nameArray[0] != previousNameArray[0]) {
                            showSeparator = true;
                        }

                        mCursor.moveToPosition(position);
                    }

                    // Cache it
                    mRowStates[position] = showSeparator ? SECTIONED_STATE : REGULAR_STATE;

                    break;
            }

            TextView separatorView = (TextView) view.findViewById(R.id.separator);

            if (showSeparator) {
                separatorView.setText(name.toCharArray(), 0, 1);
                separatorView.setVisibility(View.VISIBLE);
            }
            else {
                view.findViewById(R.id.separator).setVisibility(View.GONE);
            }

            return view;
        }
    }

关于android 一个列表项中光标的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27749989/

相关文章:

android - 多种风格的 Android 应用程序的 BDD android 测试无法正常工作

java - spinner.setAdapter(适配器) 导致 "A resource was acquired at attached stack trace but never released"错误并应用程序强制关闭

android - 强制 Listview 不重用 View (复选框)

android - 如何使ListView中的Header View不可选?

android - 将外部Sqlite与SimpleCursorAdapter一起使用时应用崩溃

android - Observable.create() 和 Observable.fromCallable() 的区别

android - 连接到 Google API 客户端时 Android Activity 生命周期的奇怪行为

android - ListView 中的 OnItemClickListener 和 OnClickListener

android - 将 recyclerview 与数据库一起使用

android - 从简单的游标适配器填充微调器