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