Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RecyclerView中的项目与android中的项目一样_Android_Android Recyclerview - Fatal编程技术网

RecyclerView中的项目与android中的项目一样

RecyclerView中的项目与android中的项目一样,android,android-recyclerview,Android,Android Recyclerview,在下图中,当用户单击recyclerview项时,“添加到文字” 但在再次关闭和打开应用程序后,它会变回“添加到文字” 我想在用户重新打开应用程序时保持不变 TodayFragment.java public class TodayFragment extends Fragment { private RecyclerView wordRecyclerView; private DbHelper dbHelper; private SQLiteDatabase mD

在下图中,当用户单击recyclerview项时,“添加到文字”

但在再次关闭和打开应用程序后,它会变回“添加到文字”

我想在用户重新打开应用程序时保持不变

TodayFragment.java

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");
}