Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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
Java Recyclerview没有';在滑动其中一行后,不显示任何数据_Java_Android_Dao - Fatal编程技术网

Java Recyclerview没有';在滑动其中一行后,不显示任何数据

Java Recyclerview没有';在滑动其中一行后,不显示任何数据,java,android,dao,Java,Android,Dao,我已将刷卡添加到我的应用程序中,以删除指定的便笺。几天来,我一直面临刷卡后显示数据的问题。为了澄清: 比方说,我们有两个项目在回收视图。每当我们刷其中一个,第二个应该是可见的,但直到我重新运行应用程序。我该怎么解决呢 主要活动 public class MainActivity extends AppCompatActivity implements MemoAdapter.OnNoteListener { private static final String TAG = "

我已将刷卡添加到我的应用程序中,以删除指定的便笺。几天来,我一直面临刷卡后显示数据的问题。为了澄清: 比方说,我们有两个项目在回收视图。每当我们刷其中一个,第二个应该是可见的,但直到我重新运行应用程序。我该怎么解决呢

主要活动

   public class MainActivity extends AppCompatActivity implements MemoAdapter.OnNoteListener {


    private static final String TAG = "MainActivity";

    //Vars
    private ArrayList<Note> mNotes = new ArrayList<>();
    private MemoRepository mRepository;
    private MemoAdapter mMemoAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mRepository = new MemoRepository(this);
        Toolbar toolbar = (Toolbar) findViewById(R.id.memoToolbar);
        setSupportActionBar(toolbar);
        setTitle("My memos");

        initRecyclerView();

    }
    //This method would be called after getting result from memo_content such as new memo, or edited existing memo.
    @Override
    protected void onResume() {
        super.onResume();
        getMemos();
    }

    private void getMemos(){
        mRepository.getAllMemos().observe(this, new Observer<List<Note>>() {
            @Override
            public void onChanged(List<Note> notes) {
                if (mNotes.size() > 0){
                    notes.clear();
                }
                if (notes != null){
                    mNotes.addAll(notes);
                    mMemoAdapter.watchMemoChanges((ArrayList<Note>) notes);
                }
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.icon_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.addNewNote:
                Toast.makeText(this, "Click!", Toast.LENGTH_SHORT).show();
                startActivity(new Intent(this, memo_content.class));

                break;
            case R.id.deleteAllNotes:
                Toast.makeText(this, "Delete!", Toast.LENGTH_SHORT).show();
                mRepository.deleteAllMemos();
                break;

        }
        return super.onOptionsItemSelected(item);
    }
    private void initRecyclerView(){
        //UI
        RecyclerView mRecyclerView = findViewById(R.id.recyclerView);
        mRecyclerView.setHasFixedSize(true);

        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
        mMemoAdapter = new MemoAdapter(mNotes, this);
        new ItemTouchHelper(itemTouch).attachToRecyclerView(mRecyclerView);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mMemoAdapter);

    }
    @Override
    public void onMemoClick(int position) {
        Intent intent = new Intent(this, memo_content.class);
        intent.putExtra("memo_content", mNotes.get(position));
        startActivity(intent);
    }

    private ItemTouchHelper.SimpleCallback itemTouch = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.START | ItemTouchHelper.LEFT) {
        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
            mRepository.deleteMemo(mNotes.get(viewHolder.getAdapterPosition()));
            Log.d(TAG, "onSwiped: "+mNotes.get(viewHolder.getAdapterPosition()));

        }
    };
}
public类MainActivity扩展AppCompatActivity实现MemoAdapter.OnNoteListener{
私有静态最终字符串TAG=“MainActivity”;
//瓦尔斯
private ArrayList mNotes=new ArrayList();
私人记忆库;
私人备忘录适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRepository=新的记忆库(this);
Toolbar Toolbar=(Toolbar)findViewById(R.id.memoToolbar);
设置支持操作栏(工具栏);
setTitle(“我的备忘录”);
initRecyclerView();
}
//从备忘录内容(如新备忘录或编辑的现有备忘录)获取结果后,将调用此方法。
@凌驾
受保护的void onResume(){
super.onResume();
getMemos();
}
私人备忘录{
mRepository.getAllMemos().observe(这个,新的观察者(){
@凌驾
更改后的公共作废(列表注释){
如果(mNotes.size()>0){
notes.clear();
}
如果(注意!=null){
mNotes.addAll(注释);
mMemoAdapter.watchMemoChanges((ArrayList)notes);
}
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.icon\u菜单,菜单);
返回super.onCreateOptions菜单(菜单);
}
@凌驾
公共布尔值OnOptionItemSelected(@NonNull MenuItem item){
开关(item.getItemId()){
案例R.id.addNewNote:
Toast.makeText(这是“单击!”,Toast.LENGTH\u SHORT.show();
startActivity(新意图(本备忘录内容类));
打破
案例R.id.deleteAllNotes:
Toast.makeText(这是“删除!”,Toast.LENGTH_SHORT.show();
mRepository.deleteAllMemos();
打破
}
返回super.onOptionsItemSelected(项目);
}
私有void initRecyclerView(){
//用户界面
RecyclerView mRecyclerView=findViewById(R.id.RecyclerView);
mRecyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager mLayoutManager=新的LinearLayoutManager(此);
mMemoAdapter=新的内存适配器(mNotes,this);
新建ItemTouchHelper(itemTouch).attachToRecyclerView(mRecyclerView);
mRecyclerView.setLayoutManager(mllayoutmanager);
mRecyclerView.setAdapter(mMemoAdapter);
}
@凌驾
鼠标单击时的公共无效(int位置){
意向意向=新意向(本备忘录内容类);
intent.putExtra(“备忘录内容”,mNotes.get(位置));
星触觉(意向);
}
private ItemTouchHelper.SimpleCallback itemTouch=新建ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.START | ItemTouchHelper.LEFT){
@凌驾
公共布尔onMove(@NonNull RecyclerView RecyclerView,@NonNull RecyclerView.ViewHolder ViewHolder,@NonNull RecyclerView.ViewHolder target){
返回false;
}
@凌驾
公共void onsweed(@NonNull RecyclerView.ViewHolder ViewHolder,int-direction){
mRepository.deletemo(mNotes.get(viewHolder.getAdapterPosition());
Log.d(标记为“+mNotes.get”(viewHolder.getAdapterPosition());
}
};
}
适配器

public class MemoAdapter extends RecyclerView.Adapter<MemoAdapter.MemoViewHolder> {

private ArrayList<Note> mNotes;
private OnNoteListener mListener;

public class MemoViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView title, timestamp;

    private MemoViewHolder(@NonNull final View itemView) {
        super(itemView);
        this.title = (TextView) itemView.findViewById(R.id.title);
        this.timestamp = (TextView) itemView.findViewById(R.id.timestamp);
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        mListener.onMemoClick(getAdapterPosition());
    }
}

public MemoAdapter(ArrayList<Note> notes, OnNoteListener listener) {
    this.mNotes = notes;
    this.mListener = listener;
}

@NonNull
@Override
public MemoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_memo, parent, false);
    return new MemoViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull MemoViewHolder holder, int position) {
    holder.title.setText(mNotes.get(position).getTitle());
    holder.timestamp.setText(mNotes.get(position).getTimestamp());
}

public void watchMemoChanges(ArrayList<Note> notes){
    this.mNotes = notes;
    notifyDataSetChanged();
}



@Override
public int getItemCount() {
    return mNotes.size();
}

public interface OnNoteListener{
   void onMemoClick(int position);
}
公共类MemoAdapter扩展了RecyclerView.Adapter{ 私人ArrayList mNotes; 私有的onnotemlistener; 公共类MemoViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{ 文本视图标题,时间戳; 私有MemoViewHolder(@NonNull最终视图itemView){ 超级(项目视图); this.title=(TextView)itemView.findViewById(R.id.title); this.timestamp=(TextView)itemView.findViewById(R.id.timestamp); setOnClickListener(这个); } @凌驾 公共void onClick(视图v){ onMemoClick(getAdapterPosition()); } } 公共备忘录适配器(ArrayList notes、OnNoteListener侦听器){ this.mNotes=注释; this.mListener=侦听器; } @非空 @凌驾 公共备忘录ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){ View=LayoutFlater.from(parent.getContext()).flate(R.layout.single\u memo,parent,false); 返回新的MemoViewHolder(视图); } @凌驾 public void onBindViewHolder(@NonNull MemoViewHolder holder,int位置){ holder.title.setText(mNotes.get(position.getTitle()); holder.timestamp.setText(mNotes.get(position.getTimestamp()); } 公共无效更改(ArrayList注释){ this.mNotes=注释; notifyDataSetChanged(); } @凌驾 public int getItemCount(){ 返回mNotes.size(); } 公共接口OnNoteListener{ 鼠标点击无效(内部位置); }
简短回答:

当您通过观察者从数据库接收到
LiveData
列表中的更改时,需要删除语句
notes.clear()

详细答案

public class MemoAdapter extends RecyclerView.Adapter<MemoAdapter.MemoViewHolder> {

private ArrayList<Note> mNotes;
private OnNoteListener mListener;

public class MemoViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView title, timestamp;

    private MemoViewHolder(@NonNull final View itemView) {
        super(itemView);
        this.title = (TextView) itemView.findViewById(R.id.title);
        this.timestamp = (TextView) itemView.findViewById(R.id.timestamp);
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        mListener.onMemoClick(getAdapterPosition());
    }
}

public MemoAdapter(ArrayList<Note> notes, OnNoteListener listener) {
    this.mNotes = notes;
    this.mListener = listener;
}

@NonNull
@Override
public MemoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_memo, parent, false);
    return new MemoViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull MemoViewHolder holder, int position) {
    holder.title.setText(mNotes.get(position).getTitle());
    holder.timestamp.setText(mNotes.get(position).getTimestamp());
}

public void watchMemoChanges(ArrayList<Note> notes){
    this.mNotes = notes;
    notifyDataSetChanged();
}



@Override
public int getItemCount() {
    return mNotes.size();
}

public interface OnNoteListener{
   void onMemoClick(int position);
}
当您第一次运行应用程序时,它将显示所有正确的列表,因为不满足条件
if(mNotes.size()>0)
,因此不会通过
notes.clear()
清除收到的列表,因此
RecyclerView
将显示正确的数据

但是,当您删除注释时,当新列表再次触发观察者时,条件
if(mNotes.size