【发布时间】:2015-12-11 18:00:23
【问题描述】:
我的应用由两个片段组成(我们称它们为 A 和 B)。 Fragment A 显示 RecyclerView, Fragment B 显示该 Recycler 上所选项目的内容。在小屏幕和普通屏幕上,每个 Fragment 都显示在其 Activity 上,但在大屏幕上,两个 Fragment 同时显示,所以我希望在多窗格 Activity 中,当用户单击 RecyclerView 中的项目时,它会突出显示。我在 StackOverflow 上发现了很多这样的问题,但它们不适用于我的适配器。
final FragmentCallback activity;
final FragmentA fragment; //The fragment with the RecyclerView
Cursor cursor;
int idColumnIndex;
int titleColumnIndex;
int balanceColumnIndex;
public MoneyboxesAdapter(FragmentCallback activity, FragmentA frag){
this.activity = activity;
this.fragment = frag;
}
public void swapCursor(Cursor c){
// Method called whenever the data stored on the DB has changed
this.cursor = c; //Updates the current cursor
if(cursor!=null){
cursor.moveToFirst();
idColumnIndex = cursor.getColumnIndex(MoneyboxProvider.COLUMN_MONEYBOX_ID);
titleColumnIndex = cursor.getColumnIndex(MoneyboxProvider.COLUMN_MONEYBOX_TITLE);
balanceColumnIndex = cursor.getColumnIndex(MoneyboxProvider.COLUMN_MONEYBOX_BALANCE);
}
notifyDataSetChanged();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
CardView v = (CardView) LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.moneybox_item, viewGroup, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
// Sets up the views
cursor.moveToPosition(i);
final long id = getItemId(i);
final String moneyboxTitle = cursor.getString(titleColumnIndex);
final float balance = cursor.getFloat(balanceColumnIndex);
viewHolder.title.setText(moneyboxTitle);
viewHolder.balance.setText(balance);
viewHolder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
activity.onLoadMoneybox(id);
//TODO: Show selected on multipane
}
});
}
@Override
public int getItemCount() {
return cursor!=null?cursor.getCount():0;
}
public long getItemId(int position){
// Gets the ID in the DB of a moneybox
cursor.moveToPosition(position);
return cursor.getLong(idColumnIndex);
}
static class ViewHolder extends RecyclerView.ViewHolder{
CardView cardView;
TextView title;
TextView balance;
ImageView threeDots;
public ViewHolder(CardView itemView) {
super(itemView);
cardView = itemView;
title = (TextView) itemView.findViewById(R.id.moneybox_item_title);
balance = (TextView) itemView.findViewById(R.id.moneybox_item_balance);
threeDots = (ImageView)itemView.findViewById(R.id.three_dots_moneybox);
}
}
【问题讨论】:
标签: android android-sqlite android-recyclerview