Отправка Намерения изменить фрагмент из пользовательских адаптеров выбрасывает Посылка: невозможно маршалировать значение - PullRequest
0 голосов
/ 16 апреля 2019

Поэтому я пытаюсь отправить Intent из моего пользовательского адаптера через onClickListener в другое действие, чтобы запустить fragement, но каждый раз, когда я это делаю, я получаю следующую ошибку: java.lang.RuntimeException: Parcel: невозможно определить значение.

Это код пользовательского адаптера:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if(convertView == null) {

        convertView = LayoutInflater.from(context).inflate(R.layout.view_order_list_item, parent, false);

    }

    TextView orderID = convertView.findViewById(R.id.listOrderID);
    TextView status = convertView.findViewById(R.id.listStatus);
    TextView datePlaced = convertView.findViewById(R.id.listDate);
    TextView amount = convertView.findViewById(R.id.listAmount);

    ImageButton cancelOrderBtn = convertView.findViewById(R.id.cancelOrderListBtn);
    ImageButton complaintBtn = convertView.findViewById(R.id.complaintOrderListBtn);

    orderID.setText(arr.get(position).getOrderID());
    status.setText(arr.get(position).getStatus());
    datePlaced.setText(arr.get(position).getDatePlaced());
    amount.setText(arr.get(position).getAmountTotal().toString());

    cancelOrderBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AlertDialog.Builder cancelO = new AlertDialog.Builder(context);
            cancelO.setMessage("Do you want to cancel this order?").setCancelable(false)
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                            cancelOrder(orderID.getText().toString());

                            return;
                        }
                    })
                    .setNegativeButton("No", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
            AlertDialog alert = cancelO.create();
            alert.setTitle("Cancel order?");
            alert.show();
        }
    });

    complaintBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            AlertDialog.Builder complaintO = new AlertDialog.Builder(context);
            complaintO.setMessage("Submit a complaint for this order?").setCancelable(false)
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                            Intent i=new Intent(context, HomeActivity.class);
                            i.putExtra("key","value");
                            context.startActivity(i);

                        }
                    })
                    .setNegativeButton("No", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
            AlertDialog alert = complaintO.create();
            alert.setTitle("Cancel order?");
            alert.show();

        }
    });

    return convertView;
}

Это код объекта заказа

public class RetrieveOrderObject {

String orderID;
String status;
Double amountTotal;
String datePlaced;

public RetrieveOrderObject(String orderID, String status, Double amountTotal, String datePlaced) {
    this.orderID = orderID;
    this.status = status;
    this.amountTotal = amountTotal;
    this.datePlaced = datePlaced;
}

public String getOrderID() {
    return orderID;
}

public void setOrderID(String orderID) {
    this.orderID = orderID;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public Double getAmountTotal() { return amountTotal; }

public void setAmountTotal(Double amountTotal) {
    this.amountTotal = amountTotal;
}

public String getDatePlaced() {
    return datePlaced;
}

public void setDatePlaced(String datePlaced) {
    this.datePlaced = datePlaced;
}
}

Это фрагмент, который отображает представление списка

public class ViewOrdersFragment extends Fragment {


ListView simpleList;
String username;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

    View view = inflater.inflate(R.layout.view_order_list, container, false);

    ArrayList<RetrieveOrderObject> order = (ArrayList<RetrieveOrderObject>) getArguments().getSerializable("order");

    ViewOrderListCustomAdaptor adaptor = new ViewOrderListCustomAdaptor(getContext(), order);

    simpleList = view.findViewById(R.id.listView);

    simpleList.setAdapter(adaptor);

    return view;
}

@Override
public void onStart() {
    super.onStart();

    findUser();

}


public void findUser() {

    username =  User.USERNAME;

}

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

Кстати, пользовательский адаптер подключен к другому фрагменту. Не знаю, имеет ли это значение.

...