Android:使用CursorAdapter

时间:2017-01-13 13:22:54

标签: android listview layout android-cursoradapter

我目前正在处理一个应用程序,它会在列表视图中显示来自SQLiteDatabase的数据。此列表视图使用自定义布局。我的意图是有三种不同的布局,具体取决于用户在做什么。第一个布局仅显示一个TextView和一个Button(称为row_nameonly)。如果用户按下此按钮,布局将切换到更详细的视图(称为row_viewentry)。 Finnaly,如果用户再次按下按钮,则会再次显示第一个布局(row_nameonly)。我试图做到这一点,但还没有找到一个有效的解决方案。我当前的版本似乎更改了行的视图,但新布局不可见。我希望这样做,而无需向数据库添加额外的数据。 这是Custom CursorAdapter的代码:

public class EntryListCursorAdapter extends CursorAdapter{

public int viewRequestPosition = -100;

public EntryListCursorAdapter(Context context, Cursor c) {
    super(context, c, 0);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return LayoutInflater.from(context).inflate(R.layout.row_nameonly, parent, false);
}

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

    ViewGroup parent = (ViewGroup) view.getParent();

    if(cursor.getPosition() == viewRequestPosition){
        view = LayoutInflater.from(context).inflate(R.layout.row_viewentry, parent, false);
    }

    if(!(cursor.getPosition() == viewRequestPosition)) {
        TextView nameView = (TextView) view.findViewById(R.id.txt_name);
        ImageButton expandMoreButton = (ImageButton) view.findViewById(R.id.btn_expandmore);

        String name = cursor.getString(cursor.getColumnIndexOrThrow("prename")) + " " +
                cursor.getString(cursor.getColumnIndexOrThrow("surname"));

        nameView.setText(name);

        expandMoreButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                viewRequestPosition = cursor.getPosition();
                notifyDataSetChanged();
            }
        });
    }
}

TLDR:有没有办法让CursorAdapter改变单击按钮的视图布局,并显示新的布局,而不向SQLiteDatabase添加额外的数据?

谢谢 (如果您需要更多信息,请询问)

1 个答案:

答案 0 :(得分:0)

如果有人好奇, 我有适配器把Fragment在它的构造函数中调用它。然后我保存了ListItems的位置,我想改变称为适配器的片段中的布局。然后我创建了一个适配器的新实例,但这次布局会根据我在片段中保存的位置而改变。