RecyclerView中的项目与android中的项目一样
在下图中,当用户单击recyclerview项时,“添加到文字” 但在再次关闭和打开应用程序后,它会变回“添加到文字” 我想在用户重新打开应用程序时保持不变 TodayFragment.javaRecyclerView中的项目与android中的项目一样,android,android-recyclerview,Android,Android Recyclerview,在下图中,当用户单击recyclerview项时,“添加到文字” 但在再次关闭和打开应用程序后,它会变回“添加到文字” 我想在用户重新打开应用程序时保持不变 TodayFragment.java public class TodayFragment extends Fragment { private RecyclerView wordRecyclerView; private DbHelper dbHelper; private SQLiteDatabase mD
public class TodayFragment extends Fragment {
private RecyclerView wordRecyclerView;
private DbHelper dbHelper;
private SQLiteDatabase mDatabase;
private Context mContext;
WordAdapter mWordAdapter;
private static final String LOG_TAG = "TodayFragment";
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbHelper = new DbHelper(mContext);
mDatabase = dbHelper.getWritableDatabase();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
Log.d(LOG_TAG,"onAttach");
mContext = context;
}
@Override
public void onDetach() {
super.onDetach();
Log.d(LOG_TAG,"onDetach");
mContext = null;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_today,container,false);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
wordRecyclerView = view.findViewById(R.id.word_recycler_view);
// wordRecyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
wordRecyclerView.setLayoutManager(linearLayoutManager);
String query = "select * from wordhistory;";
Cursor c = mDatabase.rawQuery(query, new String[] {});
Log.d(LOG_TAG,"cursor count, "+c.getCount());
Log.d(LOG_TAG,"onViewCreated set recycler view");
mWordAdapter = new WordAdapter(mContext);
wordRecyclerView.setAdapter(mWordAdapter);
mWordAdapter.swapCursor(c);
mWordAdapter.notifyDataSetChanged();
}
}
fragment_today.xml
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
tools:context=".fragment.TodayFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:id="@+id/word_recycler_view" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
java
public class WordAdapter extends BaseCursorAdapter<WordAdapter.WordViewHolder> {
private static final String LOG_TAG = "WordAdapter";
Context mContext;
private OnItemClickListener mListener;
private int touchCount=0;
Cursor mCursor;
public WordAdapter(Context mContext) {
super(null);
this.mContext = mContext;
}
public interface OnItemClickListener{
void onItemClick(int position);
}
public void setOnItemClickListener(OnItemClickListener listener){
mListener = listener;
}
@NonNull
@Override
public WordViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view;
view = layoutInflater.inflate(R.layout.word_card_layout,parent,false);
Log.d(LOG_TAG,"onCreateViewHolder: ");
return new WordViewHolder(view);
}
@Override
public void onBindViewHolder(WordViewHolder holder, Cursor cursor) {
int wordColumnIndex = cursor.getColumnIndex(DictionaryContract.DictionaryEntry.COLUMN_WORD);
int defColumnIndex = cursor.getColumnIndex(DictionaryContract.DictionaryEntry.COLUMN_WORD_DEFINITION);
int audioColumnIndex = cursor.getColumnIndex(DictionaryContract.DictionaryEntry.COLUMN_WORD_AUDIOURL);
int synonymColumnIndex = cursor.getColumnIndex(DictionaryContract.DictionaryEntry.COLUMN_WORD_SYNONYMS);
int antonymColumnIndex = cursor.getColumnIndex(DictionaryContract.DictionaryEntry.COLUMN_WORD_ANTONYMS);
String wordStr = cursor.getString(wordColumnIndex);
String wordDefStr = cursor.getString(defColumnIndex);
String audioStr = cursor.getString(audioColumnIndex);
String synonymStr = cursor.getString(synonymColumnIndex);
String antonymStr = cursor.getString(antonymColumnIndex);
Log.d(LOG_TAG,"onBindViewHolder wordStr: "+wordStr);
Log.d(LOG_TAG,"onBindViewHolder wordDefStr: "+wordDefStr);
holder.wordTextView.setText(wordStr);
holder.defTextView.setText(wordDefStr);
}
/* @Override
public int getItemCount() {
return mCursor.getCount();
}*/
@Override
public void swapCursor(Cursor newCursor) {
super.swapCursor(newCursor);
}
public class WordViewHolder extends RecyclerView.ViewHolder {
TextView wordTextView;
ImageView audioImageView;
TextView defTextView;
TextView wordTrickTextView;
TextView defTrickTextView;
ImageView shareImageView;
ImageView favUnselectImageView;
ImageView favSelectImageView;
TextView addWordTextView;
TextView addedWordTextView;
ImageView tickImageView;
RelativeLayout addWordRelativeLayout;
public WordViewHolder(@NonNull View itemView) {
super(itemView);
Log.d(LOG_TAG,"WordViewHolder itemView: "+itemView);
wordTextView = itemView.findViewById(R.id.wordText);
audioImageView = itemView.findViewById(R.id.wordAudio);
defTextView = itemView.findViewById(R.id.wordDef);
wordTrickTextView = itemView.findViewById(R.id.memorisingTrickWord);
defTrickTextView = itemView.findViewById(R.id.memorisingTrickDef);
shareImageView = itemView.findViewById(R.id.wordShare);
favUnselectImageView = itemView.findViewById(R.id.wordFavUnselect);
favSelectImageView = itemView.findViewById(R.id.wordFavSelect);
addWordTextView = itemView.findViewById(R.id.addWordText);
addedWordTextView = itemView.findViewById(R.id.addedWordText);
tickImageView = itemView.findViewById(R.id.tickImage);
addWordRelativeLayout = itemView.findViewById(R.id.addWordRelativeLayout);
addedWordTextView.setVisibility(View.GONE);
tickImageView.setVisibility(View.GONE);
addWordRelativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (touchCount==0){
addWordTextView.setVisibility(View.GONE);
addedWordTextView.setVisibility(View.VISIBLE);
tickImageView.setVisibility(View.VISIBLE);
((Animatable) tickImageView.getDrawable()).start();
touchCount=1;
} else{
addWordTextView.setVisibility(View.VISIBLE);
addedWordTextView.setVisibility(View.GONE);
tickImageView.setVisibility(View.GONE);
((Animatable) tickImageView.getDrawable()).stop();
touchCount=0;
}
}
});
}
}
}
公共类WordAdapter扩展BaseCursorAdapter{
私有静态最终字符串日志\u TAG=“WordAdapter”;
语境;
私人监听者;
私有int touchCount=0;
光标mCursor;
公共字适配器(上下文mContext){
超级(空);
this.mContext=mContext;
}
公共接口侦听器{
无效单击(内部位置);
}
公共void setOnItemClickListener(OnItemClickListener侦听器){
mListener=监听器;
}
@非空
@凌驾
public WordViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
LayoutInflater LayoutInflater=LayoutInflater.from(parent.getContext());
视图;
视图=布局更平坦。充气(R.layout.word\u card\u布局,父级,false);
Log.d(Log_标签,“onCreateViewHolder:”);
返回新的WordViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(WordViewHolder,光标){
int-wordColumnIndex=cursor.getColumnIndex(DictionaryContract.DictionaryEntry.COLUMN\uWord);
int defColumnIndex=cursor.getColumnIndex(DictionaryContract.DictionaryEntry.COLUMN\u WORD\u定义);
int audioColumnIndex=cursor.getColumnIndex(DictionaryContract.DictionaryEntry.COLUMN\u WORD\u AUDIOURL);
int synonymColumnIndex=cursor.getColumnIndex(DictionaryContract.DictionaryEntry.COLUMN\u WORD\u同义词);
int antonymColumnIndex=cursor.getColumnIndex(DictionaryContract.DictionaryEntry.COLUMN\u WORD\u ANTONYMS);
String wordStr=cursor.getString(wordColumnIndex);
String wordDefStr=cursor.getString(defcolumnidex);
String audioStr=cursor.getString(audioColumnIndex);
字符串同义词str=cursor.getString(同义词列索引);
String antonymStr=cursor.getString(antonymColumnIndex);
Log.d(Log_标签,“onBindViewHolder wordStr:”+wordStr);
Log.d(Log_标签,“onBindViewHolder wordDefStr:”+wordDefStr);
holder.wordTextView.setText(wordStr);
holder.defTextView.setText(wordDefStr);
}
/*@覆盖
public int getItemCount(){
返回mCursor.getCount();
}*/
@凌驾
公共无效交换游标(游标newCursor){
super.swapCursor(newCursor);
}
公共类WordViewHolder扩展了RecyclerView.ViewHolder{
文本视图wordTextView;
ImageView音频图像视图;
TextView defTextView;
文本视图wordTrickTextView;
TextView defTrickTextView;
ImageView共享ImageView;
ImageView favUnselectImageView;
ImageView favSelectImageView;
text视图addwordtext视图;
TextView addedWordTextView;
图像视图;图像视图;
RelativeLayout addWordRelativeLayout;
public WordViewHolder(@NonNull View itemView){
超级(项目视图);
Log.d(Log_标签,“WordViewHolder itemView:”+itemView);
wordTextView=itemView.findViewById(R.id.wordText);
audioImageView=itemView.findViewById(R.id.wordAudio);
defTextView=itemView.findviewbyd(R.id.wordDef);
wordTrickTextView=itemView.findViewById(R.id.memorisingTrickWord);
defTrickTextView=itemView.findviewbyd(R.id.memorisingTrickDef);
shareImageView=itemView.findViewById(R.id.wordShare);
favUnselectImageView=itemView.findviewbyd(R.id.wordFavUnselect);
favSelectImageView=itemView.findViewById(R.id.wordFavSelect);
addWordTextView=itemView.findViewById(R.id.addWordText);
addedWordTextView=itemView.findViewById(R.id.addedWordText);
tickImageView=itemView.findViewById(R.id.tickImage);
addWordRelativeLayout=itemView.findViewById(R.id.addWordRelativeLayout);
addedWordTextView.setVisibility(View.GONE);
勾选ImageView.setVisibility(View.GONE);
addWordRelativeLayout.setOnClickListener(新建视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(touchCount==0){
addWordTextView.setVisibility(View.GONE);
addedWordTextView.setVisibility(View.VISIBLE);
勾选ImageView.setVisibility(View.VISIBLE);
((可设置动画)tickImageView.getDrawable()).start();
touchCount=1;
}否则{
addWordTextView.setVisibility(View.VISIBLE);
addedWordTextView.setVisibility(View.GONE);
勾选ImageView.setVisibility(View.GONE);
((可设置动画)tickImageView.getDrawable()).stop();
touchCount=0;
}
}
});
}
}
}
即使在重新打开应用程序后,用户也应该能够在“回收器”视图的任何项目中看到他们所做的更改。当您关闭应用程序时,系统会自动销毁活动。因此,当您再次打开它时,将重新创建该活动 您可以使用
savedInstanceState
在销毁活动之前保存活动的数据
@Override
boolean herbivoreAdded;
public void OnCreate(Bundle onSaveInstanceState){
super.OnCreate(saveInstanceState);
// access saved value
herbivoreAdded = saveInstanceState.getBoolean("Herbivore");
}
您需要覆盖活动中的onSaveInstanceState
方法并添加到捆绑包中。下面是一个示例代码:
@Override
public void onSaveInstanceState(Bundle saveInstanceState){
// example, save if text is added
saveInstanceState.putBoolean("Herbivore", true);
super.onSaveInstanceState(saveInstanceState);
}
然后,当活动开始时,您可以从OnCreate
接收捆绑包
@Override
boolean herbivoreAdded;
public void OnCreate(Bundle onSaveInstanceState){
super.OnCreate(saveInstanceState);
// access saved value
herbivoreAdded = saveInstanceState.getBoolean("Herbivore");
}