Получить вызов кнопки из другого класса - PullRequest
0 голосов
/ 05 мая 2020

У меня два класса OrderAdapter.java OrderActivity.java. В классе OrderAdapter.java есть кнопка, и когда я нажимаю, она должна изменить текстовое представление в классе OrderActivity.java. Когда я запускаю приложение, текстовое представление изменяется один раз из-за этой строки, которая предназначена:
textView_order_price.setText(adapter.totalAmount + "");

, но когда я снова нажимаю кнопку, он должен снова изменить текст, но это не так. Вы можете мне помочь?

OrderActivity. java

package com.nfc.netvision;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import java.util.ArrayList;

public class OrderActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    TextView textView_order_price;
    ArrayList<ModelOrder> orderArrayList;

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

        recyclerView = findViewById(R.id.recyclerview_order_scroll);
        textView_order_price = findViewById(R.id.textView_order_price);

        orderArrayList = new ArrayList<>();
        orderArrayList.add(new ModelOrder(R.drawable.coke, "Coka Cola", "Eine Cola hält dich wach und schmeckt dazu.", "3",0));
        orderArrayList.add(new ModelOrder(R.drawable.fastfood, "Pommes", "Fritten für die Titten.", "5",0));
        orderArrayList.add(new ModelOrder(R.drawable.water, "Wasser", "Still und sanft, so mag ich es.", "5",0));
        orderArrayList.add(new ModelOrder(R.drawable.burger, "Burger", "Ach mir fällt nichts ein.", "10",0));

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        RecyclerView.LayoutManager recLiLayoutManager = layoutManager;

        recyclerView.setLayoutManager(recLiLayoutManager);

        OrderAdapter adapter = new OrderAdapter(this, orderArrayList);

        recyclerView.setAdapter(adapter);
        textView_order_price.setText(adapter.totalAmount + "");
        System.out.println(adapter.totalAmount + "TOASBTORT");


    }
}

OrderAdapter. java

package com.nfc.netvision;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.firestore.v1.StructuredQuery;
import java.util.ArrayList;
public class OrderAdapter extends RecyclerView.Adapter<OrderAdapter.ViewHolder> {
    public int totalAmount;
    private Context mContext;
    private ArrayList<ModelOrder> nList;
    OrderAdapter(Context context, ArrayList<ModelOrder> list) {
        mContext = context;
        nList = list;
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        View view = layoutInflater.inflate(R.layout.recyclerview_order_items, parent, false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }
    @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
        final ModelOrder orderItem = nList.get(position);
        ImageView image = holder.item_image;
        final TextView name, place, price;
        name = holder.item_name;
        place = holder.item_place;
        price = holder.item_price;
        image.setImageResource(orderItem.getImage());
        name.setText(orderItem.getName());
        place.setText(orderItem.getPlace());
        price.setText(orderItem.getPrice());
        holder.order_item_minus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(orderItem.getCounter() > 0) {
                    orderItem.setCounter(orderItem.getCounter()-1);
                    holder.order_item_count.setText("" + orderItem.getCounter());
                    calculatePrice(Integer.parseInt((String) price.getText()), false);
                }
            }
        });
        holder.order_item_plus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(orderItem.getCounter() < 9) {
                    orderItem.setCounter(orderItem.getCounter() + 1);
                    holder.order_item_count.setText("" + orderItem.getCounter());
                    calculatePrice(Integer.parseInt((String) price.getText()), true);
                }
            }
        });
    }
    @Override
    public int getItemCount() {
        return nList.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView item_image;
        TextView item_name, item_place, item_price,order_item_minus,order_item_count, order_item_plus;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            item_image = itemView.findViewById(R.id.order_item_image);
            item_name = itemView.findViewById(R.id.order_item_name);
            item_place = itemView.findViewById(R.id.order_item_place);
            item_price = itemView.findViewById(R.id.order_item_price);
            order_item_minus = itemView.findViewById(R.id.order_item_minus);
            order_item_plus = itemView.findViewById(R.id.order_item_plus);
            order_item_count = itemView.findViewById(R.id.order_item_count);
        }
    }
    public void calculatePrice(int pPrice, boolean pUpDown) {
        if(pUpDown) {
            totalAmount = totalAmount + pPrice;
        }
        else {
            totalAmount = totalAmount - pPrice;
        }
        System.out.println(totalAmount);
    }
}

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

добавьте этого слушателя в свой класс adpater, и когда вы нажмете кнопку listner, вызовите

private OnButtonClickListener listener;
public void setOnButtonClickListener(OnButtonClickListener listener){
this.listener=listener;
}
public interface OnButtonClickListener{
   void OnButtonClick();
}

в Button click в вашем адаптере:

listener.OnButtonClick();

в вашем классе активности

OrderAdapter adapter = new OrderAdapter(this, orderArrayList);
adapter.setOnButtonClickListener(new OnButtonClickListener () {
        @Override
        public void OnButtonClick() {


//here you can do any thing on your text view 
        }
    });
0 голосов
/ 05 мая 2020

2 способа решить вашу проблему:

1-й способ - очень простой - просто добавьте свой textView из активности в адаптер конструктора;

private TextView orderPrice;

OrderAdapter(Context context, ArrayList<ModelOrder> list,TextView orderPrice) {
    mContext = context;
    nList = list;
    this.orderPrice = orderPrice;
}


 public void calculatePrice(int pPrice, boolean pUpDown) {
    if(pUpDown) {
        totalAmount = totalAmount + pPrice;
    }
    else {
        totalAmount = totalAmount - pPrice;
    }
    //here you add totalAmount to your textView in activity
    orderPrice.setText(totalAmount.toString)

    System.out.println(totalAmount);
}   

2-й способ создать интерфейс в вашем адаптере и реализовать это в вашей деятельности;

// 1-й создайте интерфейс в вашем адаптере следующим образом:

public class OrderAdapter extends 
RecyclerView.Adapter<OrderAdapter.ViewHolder> {
public int totalAmount;
private Context mContext;
private ArrayList<ModelOrder> nList;
private TotalListener listener;

interface TotalListener{
    void onTotalChanged(String result);

}

OrderAdapter(Context context, ArrayList<ModelOrder> list,TotalListener listener) {
    mContext = context;
    nList = list;
    this.listener = listener;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    LayoutInflater layoutInflater = LayoutInflater.from(mContext);
    View view = layoutInflater.inflate(R.layout.recyclerview_order_items, parent, false);
    ViewHolder viewHolder = new ViewHolder(view);
    return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
    final ModelOrder orderItem = nList.get(position);
    ImageView image = holder.item_image;
    final TextView name, place, price;
    name = holder.item_name;
    place = holder.item_place;
    price = holder.item_price;
    image.setImageResource(orderItem.getImage());
    name.setText(orderItem.getName());
    place.setText(orderItem.getPlace());
    price.setText(orderItem.getPrice());
    holder.order_item_minus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(orderItem.getCounter() > 0) {
                orderItem.setCounter(orderItem.getCounter()-1);
                holder.order_item_count.setText("" + orderItem.getCounter());
                calculatePrice(Integer.parseInt((String) price.getText()), false);
            }
        }
    });
    holder.order_item_plus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(orderItem.getCounter() < 9) {
                orderItem.setCounter(orderItem.getCounter() + 1);
                holder.order_item_count.setText("" + orderItem.getCounter());
                calculatePrice(Integer.parseInt((String) price.getText()), true);
            }
        }
    });
}
@Override
public int getItemCount() {
    return nList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
    ImageView item_image;
    TextView item_name, item_place, item_price,order_item_minus,order_item_count, order_item_plus;
    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        item_image = itemView.findViewById(R.id.order_item_image);
        item_name = itemView.findViewById(R.id.order_item_name);
        item_place = itemView.findViewById(R.id.order_item_place);
        item_price = itemView.findViewById(R.id.order_item_price);
        order_item_minus = itemView.findViewById(R.id.order_item_minus);
        order_item_plus = itemView.findViewById(R.id.order_item_plus);
        order_item_count = itemView.findViewById(R.id.order_item_count);
    }
}
public void calculatePrice(int pPrice, boolean pUpDown) {
    if(pUpDown) {
        totalAmount = totalAmount + pPrice;
    }
    else {
        totalAmount = totalAmount - pPrice;
    }
    //this is callback to your activity

    listener.onTotalChanged(totalAmount.toString)
    System.out.println(totalAmount);
}

}

и это ваше обновленное действие

 public class OrderActivity extends AppCompatActivity impelemts OrderAdapter.TotalListener {

RecyclerView recyclerView;
TextView textView_order_price;
ArrayList<ModelOrder> orderArrayList;

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

    recyclerView = findViewById(R.id.recyclerview_order_scroll);
    textView_order_price = findViewById(R.id.textView_order_price);

    orderArrayList = new ArrayList<>();
    orderArrayList.add(new ModelOrder(R.drawable.coke, "Coka Cola", "Eine Cola hält dich wach und schmeckt dazu.", "3",0));
    orderArrayList.add(new ModelOrder(R.drawable.fastfood, "Pommes", "Fritten für die Titten.", "5",0));
    orderArrayList.add(new ModelOrder(R.drawable.water, "Wasser", "Still und sanft, so mag ich es.", "5",0));
    orderArrayList.add(new ModelOrder(R.drawable.burger, "Burger", "Ach mir fällt nichts ein.", "10",0));

    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    RecyclerView.LayoutManager recLiLayoutManager = layoutManager;

    recyclerView.setLayoutManager(recLiLayoutManager);

    OrderAdapter adapter = new OrderAdapter(this, orderArrayList,this);

    recyclerView.setAdapter(adapter);
    textView_order_price.setText(adapter.totalAmount + "");
    System.out.println(adapter.totalAmount + "TOASBTORT");


}

@Override
public void onTotalChanged(String result) {
    textView_order_price.setText(result);
}

}

...