Количество предметов увеличивается в обзоре переработчика после нажатия на предмет - PullRequest
0 голосов
/ 10 марта 2020

Когда я нажимаю на элемент в программе восстановления, я перехожу к DetailsActivity, но когда я возвращаюсь из DetailsActivity в MainActivity, я не вижу. элементов увеличилось в моем обзоре переработчика, но нет увеличения нет. элементов на firebase и когда я перезагружаю приложение нет. элементы возвращаются к нормальному состоянию в представлении переработчика.

Before clicking on an item

After clicking on an item

MainActivity. java

    public class MainActivity extends AppCompatActivity {
    private  Button button;
    private  Button button2;
    EditText editText;
    EditText editText2;
    String TAG ="MyTag";
    //private FirebaseDatabase mRootRef;
    //private DatabaseReference mRefMain;
    private ChildEventListener mchildeventlistener;
    private RecyclerView mRecyclerView;
    private mModelAdapter modelAdapter;
    private List<User> mDataList;

    DatabaseReference mRootRef= FirebaseDatabase.getInstance().getReference();
    DatabaseReference mRefMain =mRootRef.child("Users");
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.Senddata);
        button2 = (Button) findViewById((R.id.GetData));
        editText = (EditText) findViewById(R.id.Firstname);
        editText2 = (EditText) findViewById(R.id.Agee);
        mRecyclerView = findViewById(R.id.recyclerView);


        //mRootRef = FirebaseDatabase.getInstance();
        //mRefMain = mRootRef.getReference("Users");

        mDataList = new ArrayList<>();

        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        modelAdapter = new mModelAdapter(MainActivity.this, mDataList);
        mRecyclerView.setAdapter(modelAdapter);



    }

    @Override
    protected void onStart() {
        super.onStart();
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String name = editText.getText().toString();
                 int age = Integer.parseInt(editText2.getText().toString());

                User user = new User(name,age);

                String key = mRefMain.push().getKey();
                mRefMain.child(key).setValue(user);

                Toast.makeText(MainActivity.this, "Done", Toast.LENGTH_SHORT).show();
            }
        });


        mchildeventlistener = new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                User user = dataSnapshot.getValue(User.class);
                assert user != null;
                user.setUid(dataSnapshot.getKey());
                mDataList.add(user);
                modelAdapter.notifyDataSetChanged();
                //modelAdapter = new mModelAdapter(MainActivity.this,mDataList); //this will recreate the adapter with new data
                //RecyclerView.setAdapter(modelAdapter); //Again set adapter to recyclerview

                //Log.d(TAG, "OnChildAdded : Name    " + user.getName());
                //Log.d(TAG, "OnChildAdded : age    " + user.getAge());


            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
                //User user=dataSnapshot.getValue(User.class);
                //user.setUid(dataSnapshot.getKey());

                //mDataList.remove(user);
                //modelAdapter.notifyDataSetChanged();

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        };




        mRefMain.addChildEventListener(mchildeventlistener);



       /* button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });

        */



    }
    @Override
    protected void onDestroy(){
        super.onDestroy();
        mRefMain.removeEventListener(mchildeventlistener);
    }


}

mModelAdapter. java

    public class mModelAdapter extends RecyclerView.Adapter<mModelAdapter.MyViewHolder> {
    private Context context;
    private List<User> mDataList;
     public static final String USER_KEY = "user_key";
    public mModelAdapter(Context context, List<User> mDataList) {
        this.context = context;
        this.mDataList = mDataList;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View rootView= LayoutInflater.from(context).inflate(R.layout.recycler_view_item,parent,false);

        return new MyViewHolder(rootView);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        final User user = mDataList.get(position);

       holder.textView.setText(user.getName()+"   |    "+user.getAge());


       holder.textView.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
              String uid=user.getUid("");
               Intent intent = new Intent(context,DetailsActivity.class);
               intent.putExtra(USER_KEY,uid);
               context.startActivity(intent);
           }
       });

      /* holder.textView.setOnLongClickListener(new View.OnLongClickListener() {
           @Override
           public boolean onLongClick(View v) {

               String userId= user.getUid("");
               Task<Void> voidTask = Utils.removeUser(userId);
               voidTask.addOnSuccessListener(new OnSuccessListener<Void>() {
                   @Override
                   public void onSuccess(Void aVoid) {
                       Toast.makeText(context,"Deleted Successfully",Toast.LENGTH_SHORT).show();

                   }
               });
               return true;
           }
       });

       */



    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder{
        TextView textView;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView);
        }
    }
}

ПодробностиДеятельность. java

    public class DetailsActivity extends AppCompatActivity {
    private TextView mOutPuText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details);
        mOutPuText=findViewById(R.id.Show_Text);

        String uid= getIntent().getStringExtra(mModelAdapter.USER_KEY);

       // DatabaseReference mRootRef= FirebaseDatabase.getInstance().getReference();
        //DatabaseReference mRefMain =mRootRef.child("Users").child(uid);

        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users").child(uid);

         databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                User user =dataSnapshot.getValue(User.class);
                mOutPuText.setText(user.getName());

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });



    }


}

1 Ответ

1 голос
/ 10 марта 2020

Создайте «mchildeventlistener» в методе onCreate () вместо «onStart». Это решит вашу проблему.

причина : метод onStart () вызывается каждый раз, когда вы go обращаетесь к DetailActivity и возвращаетесь. Следовательно, новый ChildEventListener создается каждый раз, что приводит к дублированию данных.

...