Проблема с отображением и сохранением данных из одного представления корзины в другое - PullRequest
1 голос
/ 19 февраля 2020

Я новичок в Android и не могу понять, почему, когда я отправляю данные из одного действия в другое, он не запоминает значения, которые я сохранил ранее, и не может показать мне более одного элемента внутри корзина для покупок.

Пример:

У меня есть список покупок и список корзин

Внутри списка покупок у меня есть recycleview, и у меня есть предметы, которые я могу добавить в корзину, когда я нажимаю кнопку добавления, элемент добавляется в корзину путем отправки данных в действие корзины и показывает мне данные в представлении корзины (этот recycleview находится внутри операции корзины), но теперь, если я go вернусь с помощью кнопки «Назад» телефона и выберу другой товар из списка покупок, когда я go добавлю в список корзин предыдущий товар, он исчезнет, ​​и я не понимаю, почему, так как я создал ArrayList и я сохраняю данные внутри него. Может кто-нибудь объяснить мне, что я делаю не так?

Я добавлю 3 фотографии, чтобы объяснить себя лучше.

enter image description here

enter image description here

На втором рисунке, если я go вернусь из корзины покупок в список покупок и нажмите на C, A из корзины исчезнет, ​​и у меня будет только C.

Это мой код:

Список покупок:

public class FirebaseSearch extends AppCompatActivity {

private EditText mSearchField;
private ImageButton mSearchBtn;
private ImageButton AddToCart;
private ImageButton Cart;

String searchText="";

private RecyclerView mResultList;
private DatabaseReference mUserDatabase;




private static ArrayList<Users> arrayList = new ArrayList<>();
public static int cart_count = 0;



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

    mUserDatabase = FirebaseDatabase.getInstance().getReference("Users");

    mSearchField = findViewById(R.id.search_field);
    mSearchBtn   = findViewById(R.id.search_btn);
    mResultList  = findViewById(R.id.result_list_cart);
    AddToCart    = findViewById(R.id.imageButton2);
    Cart         = findViewById(R.id.cartButton);

    mResultList.setHasFixedSize(true);
    mResultList.setLayoutManager(new LinearLayoutManager(this));

    mSearchBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            searchText = mSearchField.getText().toString();
            firebaseUserSearch(searchText);
        }
    });

    Cart.setOnClickListener(new View.OnClickListener() {
        private Object Tag="Activity";

        @Override
        public void onClick(View v) {
            if (cart_count < 1) {

            } else {
                startActivity(new Intent(FirebaseSearch.this, CartActivity.class));
            }
        }
    });
}



private void firebaseUserSearch(String searchText) {
    Toast.makeText(FirebaseSearch.this, "Started Search", Toast.LENGTH_LONG).show();
    Query firebaseSearchQuery = 
   mUserDatabase.orderByChild("Name").startAt(searchText).endAt(searchText + "\uf8ff");
    FirebaseRecyclerAdapter<Users, UsersViewHolder> firebaseRecyclerAdapter = new 
    FirebaseRecyclerAdapter<Users, UsersViewHolder>(
            Users.class,
            R.layout.list_layout,
            UsersViewHolder.class,
            firebaseSearchQuery
    ) {
        @Override
        protected void populateViewHolder(UsersViewHolder viewHolder, Users model, int position) {
            viewHolder.getDetails(model.getName(), model.getSurname(),model.getPrice());
            viewHolder.setDetails(model.getName(), model.getSurname(),model.getPrice());
        }
    };
    mResultList.setAdapter(firebaseRecyclerAdapter);
}


@Override
protected void onStart() {
    super.onStart();
    invalidateOptionsMenu();
}

// View Holder Class
public static class UsersViewHolder extends RecyclerView.ViewHolder {
    View mView;
    String nome;
    String surname;
    Long prezzo;
    public UsersViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
        ImageButton addToCart = (ImageButton)mView.findViewById(R.id.imageButton2);
        addToCart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cart_count++;
                Context context = v.getContext();
                Intent intent = new Intent(context, CartActivity.class);
                intent.putExtra("Name",nome);
                intent.putExtra("Surname",surname);
                intent.putExtra("Prezzo",Long.toString(prezzo));
                context.startActivity(intent);
            }
        });
    }

    public void getDetails(String name,String cognome,Long price){
        nome=name;
        surname=cognome;
        prezzo=price;
    }


    public void setDetails(String name, String surname, Long price) {

        TextView user_name = (TextView) mView.findViewById(R.id.name_text);
        TextView user_surname = (TextView)mView.findViewById(R.id.status_text);
        TextView user_price = (TextView)mView.findViewById(R.id.price);

        user_name.setText(name);
        user_surname.setText(surname);
        user_price.setText(Long.toString(price));

    }
}
}enter code here

Корзина:

public class CartActivity extends AppCompatActivity {
private RecyclerView cities;
private RecyclerView.Adapter adapter;
String nome,cognome;
Long prezzo;
int totalPrice=0;
TextView campoPrezzo;
int position=0;

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

    campoPrezzo=findViewById(R.id.TotalPrice);

    //Receive the data from the previous activity
    String passedArg = getIntent().getExtras().getString("Name");
    nome=passedArg;
    String passedArg2 = getIntent().getExtras().getString("Surname");
    cognome=passedArg2;

    Intent intent = getIntent();
    String str = intent.getStringExtra("Prezzo");

    ArrayList<Users> cities = initCities(nome,cognome,Long. parseLong(str));


    this.cities = (RecyclerView) findViewById(R.id.cartList);
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
    this.cities.setLayoutManager(mLayoutManager);

    adapter = new ProductAdapter(cities);
    this.cities.setAdapter(adapter);
    System.out.println("Prezzo"+returnTotalPrice());
}

private ArrayList<Users> initCities(String nome,String cognome,Long price) {
    ArrayList<Users> list = new ArrayList<>();
    list.add(position,new Users(nome,cognome,price));
    position++;
    getTotalPrice(price);
    return list;
}

public void getTotalPrice(Long price){
    totalPrice+=price;
}

public int returnTotalPrice(){
    return totalPrice;
}
}

введите код

1 Ответ

1 голос
/ 19 февраля 2020

Вы должны сохранить в базе данных, какие элементы вы щелкнули (отправили в корзину), чтобы они не загружались снова или отображались при каждом входе в корзину. Вы просто заполняете RecyclerView всеми опциями и не сохраняете те, которые есть в ShoppingCartActivity. Когда вы запускаете действие корзины покупок, оно загружает дополнения из Intent. Если вы не нажали ни на один элемент, у намерения не будет дополнений, поэтому в корзине покупок не будет отображаться никаких элементов, если вы запустите ее снова. Если вам нужна помощь в настройке базы данных, просто спросите. Также вам следует добавить тег firebase к сообщению.

...