Why selected category variable getting null value?

Viewed 29

i am trying to create update dialogbox within recycler adapter for updating information of current selected row everything is working fine except there is always null value for "selected_category" variable which stores values of spinner item that contains list of categories,but it seems like "parent.getItemAtPosition(position).toString()" is not working. PLZ help me out of this.

package com.devesh.expensemanager;

import android.annotation.SuppressLint;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.devesh.expensemanager.database.DBHelper;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;

public class Records_Recycler_Adapter extends RecyclerView.Adapter<Records_Recycler_Adapter.RecRowViewHolder> implements DatePickerDialog.OnDateSetListener {
    Context context;
    ArrayList<HashMap<String, String>> allRecords;

    ImageView calendar_btn;
    EditText note_edt,amt_edt;
    TextView date_tv,dialogHeader;
    Spinner selectCategory_dropdown;
    Button updateExpense_btn;
    String selected_category,selctedDate,selectedMonth,upnote,upamt,update;



    public Records_Recycler_Adapter(Context context, ArrayList<HashMap<String, String>> allRecords)
    {
        this.allRecords=allRecords;
        this.context=context;
    }
    @NonNull
    @Override
    public Records_Recycler_Adapter.RecRowViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.reccord_row,parent,false);
        Records_Recycler_Adapter.RecRowViewHolder viewHolder=new Records_Recycler_Adapter.RecRowViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull RecRowViewHolder holder, @SuppressLint("RecyclerView") int position) {
        holder.srNo_tv.setText(allRecords.get(position).get("ID"));
        holder.date_tv.setText(allRecords.get(position).get("DATE"));
        holder.amt_tv.setText(allRecords.get(position).get("AMOUNT"));
        holder.category_tv.setText(allRecords.get(position).get("CATEGORY"));
        //=====================Code for updating Expense Record ======================
        holder.date_tv.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                //Inflating Dialogbox for adding records================================
                Dialog dialog = new Dialog(context);
                dialog.setContentView(R.layout.add_record_dialog);
                DBHelper db = new DBHelper(context);
                //======================================================================
                //Associating All Views==================================================
                dialogHeader = dialog.findViewById(R.id.addExpense_header);
                date_tv = dialog.findViewById(R.id.set_date_tv);
                selectCategory_dropdown = dialog.findViewById(R.id.spinner_category_selectionCW);
                note_edt = dialog.findViewById(R.id.addExpense_note_edt);
                amt_edt = dialog.findViewById(R.id.addIncome_amt_edt);
                updateExpense_btn = dialog.findViewById(R.id.addIncome_btn);
                calendar_btn = dialog.findViewById(R.id.calendar_btn);
                //=========================================================================
                //============Setting Current Data To Dialog View For Editing================================================
                dialogHeader.setText("Update Expense");
                updateExpense_btn.setText("Update");
                date_tv.setText(allRecords.get(position).get("DATE"));//implement datepicker dialog for date selection
                //===============Code for getting Currently Selected Dropdown Item From Database================================
                ArrayAdapter<CharSequence> catagoryAdapter = ArrayAdapter.createFromResource(dialog.getContext(),
                                                                        R.array.categories,R.layout.dropdown_item );
                catagoryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
                selectCategory_dropdown.setAdapter(catagoryAdapter);
                int spinnerPosition = catagoryAdapter.getPosition(allRecords.get(position).get("CATEGORY"));
                selectCategory_dropdown.setSelection(spinnerPosition);
                //=============================================================================================================
                note_edt.setText(allRecords.get(position).get("DESCRIPTION"));
                amt_edt.setText(allRecords.get(position).get("AMOUNT"));

                calendar_btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        ShowDatePickerDialog();
                    }
                });
                //==============================================================================================================
                updateExpense_btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        upnote = note_edt.getText().toString();
                        upamt = amt_edt.getText().toString();
                        update = date_tv.getText().toString();

                        selectCategory_dropdown.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                            @Override
                            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                                switch (position){
                                    case 0:
                                        selected_category =parent.getItemAtPosition(position).toString();
                                        Toast.makeText(dialog.getContext(), selected_category, Toast.LENGTH_SHORT).show();
                                        break;
                                    case 1:
                                        selected_category = parent.getItemAtPosition(position).toString();
                                        Toast.makeText(dialog.getContext(), selected_category, Toast.LENGTH_SHORT).show();
                                        break;
                                    case 2:
                                        selected_category = parent.getItemAtPosition(position).toString();
                                        Toast.makeText(dialog.getContext(), selected_category, Toast.LENGTH_SHORT).show();
                                        break;
                                    case 3:
                                        selected_category = parent.getItemAtPosition(position).toString();
                                        Toast.makeText(dialog.getContext(), selected_category, Toast.LENGTH_SHORT).show();
                                        break;
                                    case 4:
                                        selected_category = parent.getItemAtPosition(position).toString();
                                        Toast.makeText(dialog.getContext(), selected_category, Toast.LENGTH_SHORT).show();
                                        break;
                                    case 5:
                                        selected_category = parent.getItemAtPosition(position).toString();
                                        Toast.makeText(dialog.getContext(), selected_category, Toast.LENGTH_SHORT).show();
                                        break;
                                    case 6:
                                        selected_category =parent.getItemAtPosition(position).toString();
                                        Toast.makeText(dialog.getContext(), selected_category, Toast.LENGTH_SHORT).show();
                                        break;
                                    case 7:
                                        selected_category = parent.getItemAtPosition(position).toString();
                                        Toast.makeText(dialog.getContext(), selected_category, Toast.LENGTH_SHORT).show();
                                        break;
                                    case 8:
                                        selected_category = parent.getItemAtPosition(position).toString();
                                        Toast.makeText(dialog.getContext(), selected_category, Toast.LENGTH_SHORT).show();
                                        break;
                                    case 9:
                                        selected_category =parent.getItemAtPosition(position).toString();
                                        Toast.makeText(dialog.getContext(), selected_category, Toast.LENGTH_SHORT).show();
                                        break;
                                }
                            }

                            @Override
                            public void onNothingSelected(AdapterView<?> parent) {
                                selected_category = parent.getItemAtPosition(0).toString();
                                Toast.makeText(dialog.getContext(), selected_category, Toast.LENGTH_SHORT).show();

                            }
                        });
                        //=======================================================================================================
                        int id =Integer.valueOf(allRecords.get(position).get("ID"));
                        double upamt1 = Double.valueOf(upamt);

                       db.UpdateRecord(id,update,upamt1,selected_category,upnote,selectedMonth);
                        Toast.makeText(dialog.getContext(), "Record Successfully Updated", Toast.LENGTH_SHORT).show();

                        dialog.dismiss();
                    }
                });
                dialog.show();//IMP For Showing DialogBox
                return true;
            }
        });
        //=============================================================================
    }

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

    public class RecRowViewHolder extends RecyclerView.ViewHolder {
        TextView srNo_tv,date_tv,amt_tv,category_tv;
        public RecRowViewHolder(@NonNull View itemView) {
            super(itemView);
            srNo_tv = itemView.findViewById(R.id.srNo_tv);
            date_tv = itemView.findViewById(R.id.date_tv);
            amt_tv = itemView.findViewById(R.id.amount_tv);
            category_tv = itemView.findViewById(R.id.category_tv);
        }
    }
    //======Functions for date picking dialog========================================
    private void ShowDatePickerDialog() {
        DatePickerDialog datePickerDialog = new DatePickerDialog(context,this,
                Calendar.getInstance().get(Calendar.YEAR),
                Calendar.getInstance().get(Calendar.MONTH),
                Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
        datePickerDialog.show();
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        month +=1;
        selctedDate = dayOfMonth + "/" + month + "/" + year;
        selectedMonth = String.valueOf(month);
        date_tv.setText(selctedDate);
    }
    //===============================================================================
}

0 Answers
Related