从另一个班级获得按钮呼叫

时间:2020-05-05 13:28:31

标签: java android android-studio class textview

我有两个班OrderAdapter.java OrderActivity.java。在类OrderAdapter.java中是一个按钮,当我单击它时,必须更改类OrderActivity.java中的textview。当我运行该应用程序时,由于该行,textview更改了一次:
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 :(得分:0)

两种解决问题的方法:

第一种方法-非常简单-只需将活动中的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);
}   

2d方法在您的适配器中创建接口并在您的活动中实现;

// 1st这样在适配器中创建接口:

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

}

答案 1 :(得分:0)

将此侦听器添加到您的adpater类中,并在单击“单击按钮”列表器时

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

在“按钮”中单击适配器:

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 
        }
    });
相关问题