I'm using an adapter
class to set values for my items. For each item there is a +
and a -
button. I have a foodActivity
java class, activity_food
layout for the java class and a list_view_layout
for the lists. I have initialized the +
and -
buttons inside my activity class. When the activity_food
starts, the app crashes.
plus, minus and edittext in list_view_layout -
<Button
android:id="@+id/minus"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_below="@+id/foodname"
android:layout_toEndOf="@+id/foodpic"
android:text="-"
android:textSize="12sp" />
<EditText
android:id="@+id/quantity"
android:layout_width="25dp"
android:layout_height="30dp"
android:layout_below="@+id/foodname"
android:layout_toEndOf="@+id/minus"
android:ems="10"
android:inputType="number"
android:textAlignment="center"
android:background="@drawable/edittextbackground"
android:text="0" />
<Button
android:id="@+id/plus"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_alignTop="@+id/quantity"
android:layout_toEndOf="@+id/quantity"
android:text="+"
android:textSize="12sp" />
activity_food layout -
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.res.easyorder.foodActivity">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:divider="#ffff"
android:dividerHeight="5dp"/>
</RelativeLayout>
My adapter class -
package com.res.easyorder;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.zip.Inflater;
public class MyAdapter extends ArrayAdapter<item> {
int q_ty = 0;
ArrayList<item> foodlist = new ArrayList<>();
public MyAdapter(Context context, int textViewResourceId, ArrayList<item> objects){
super(context, textViewResourceId, objects);
foodlist = objects;
}
@Override
public int getCount(){
return super.getCount();
}
@Override
public View getView(final int position, View convertView, ViewGroup parent){
View v = convertView;
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.list_view_layout, null);
ImageView foodpic = (ImageView) v.findViewById(R.id.foodpic);
TextView foodname = (TextView) v.findViewById(R.id.foodname);
TextView foodprice = (TextView) v.findViewById(R.id.foodprice);
Button plus = (Button) v.findViewById(R.id.plus);
final EditText quantity = (EditText) v.findViewById(R.id.quantity);
Button minus = (Button) v.findViewById(R.id.minus);
plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
item item = getItem(position);
q_ty = Integer.parseInt(item.getQuantity());
q_ty = q_ty + 1;
quantity.setText("" +q_ty);
}
});
foodname.setText(foodlist.get(position).getFoodName());
foodpic.setImageResource(foodlist.get(position).getFoodImage());
foodprice.setText("BDT: " +foodlist.get(position).getFoodPrice());
quantity.setText(foodlist.get(position).getQuantity());
return v;
}
}
foodActivity java code. Plus minus onclicklistener is being commented -
package com.res.easyorder;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.google.firebase.auth.FirebaseAuth;
import java.util.ArrayList;
public class foodActivity extends AppCompatActivity {
private String type = null;
int quantity = 0;
private Button plus, minus;
private EditText q_ty;
ListView simplelist;
ArrayList<item> foodlist = new ArrayList<>();
private FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_food);
firebaseAuth = FirebaseAuth.getInstance();
simplelist = (ListView) findViewById(R.id.listview);
plus = (Button) findViewById(R.id.plus);
minus = (Button) findViewById(R.id.minus);
q_ty = (EditText) findViewById(R.id.quantity);
type = getIntent().getExtras().getString("type");
if(type.equals("breakfast"))
{
foodlist.add(new item("Rooti",R.drawable.ruti,5));
foodlist.add(new item("Parata",R.drawable.porata,8));
foodlist.add(new item("Tandoor",R.drawable.tandoor,15));
foodlist.add(new item("Vegetable",R.drawable.sodji,10));
foodlist.add(new item("Daal",R.drawable.dal,10));
foodlist.add(new item("Omelet",R.drawable.dimvaji,15));
foodlist.add(new item("Singara",R.drawable.singara,8));
foodlist.add(new item("Samosa",R.drawable.samosa,10));
foodlist.add(new item("Puri",R.drawable.puri,5));
}
MyAdapter myAdapter = new MyAdapter(this,R.layout.list_view_layout,foodlist);
simplelist.setAdapter(myAdapter);
/*plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//quantity = quantity + 1;
//q_ty.setText(""+quantity);
}
});
minus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (quantity==0)
{
//q_ty.setText(""+quantity);
}
else if (quantity>0)
{
quantity = quantity - 1;
//q_ty.setText(""+quantity);
}
}
});*/
}
}
You are facing this problem because you have plus minus button on Listview item row xml file and you are finding plus minus button in activity. You have to put your click listener in your adapter class
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_entry, null);
holder = new ViewHolder();
holder.quantity= (EditText) convertView.findViewById(R.id.quantity);
holder.plus = (Button) convertView.findViewById(R.id.plus);
holder.minus = (Button) convertView.findViewById(R.id.minus);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
Item item = getItem(position);
holder.quantity.setText(item.getQuantity());
holder.plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Item item = getItem(position);
q_ty = Integer.parseInt(item.getQuantity());
q_ty = q_ty + 1;
quantity.setText("" +q_ty);
item.setQuantity(q_ty);
}
});
return convertView;
}