user2591221
user2591221

Reputation: 29

ArrayAdapter Unable to access Textviews from inflated Layout

In my application I am providing an Arraylist to a custom ArrayAdapter which is responsible for inflating a layout named 'slot_item_row'. All of it is working fine here but after I access the Textviews of particular layout I get error and application crashes with log describing that unable to access textview resource. But as I comment out textviews access portion all of it displays fine. ArrayAdapter:

   public class SlotListAdapter extends ArrayAdapter<slots> {
    Context context;
    List<slots> sl;

    public SlotListAdapter(Context context,int textViewResourceId ,List<slots> Slots) {
        super(context, textViewResourceId, Slots);
        this.context = context;
        this.sl = Slots;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = vi.inflate(R.layout.slot_block, null);

        slots slot = sl.get(position);

        TextView tit = (TextView) view.findViewById(R.id.txt1s);
        tit.setText(slot.name);

        TextView num = (TextView) view.findViewById(R.id.txt2s);
        num.setText(slot.slotNum);

        TextView status = (TextView) view.findViewById(R.id.txt3s);
        status.setText(slot.status);
        return view;
    }
}

slot_block.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp" >


    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:weightSum="1">

        <ImageView
            android:layout_width="100sp"
            android:layout_height="100sp"
            android:id="@+id/imageView2"
            android:background="@drawable/parking"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="0.45">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:text="Name"
                android:id="@+id/textView9" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:text="Slot"
                android:id="@+id/textView21" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:text="Status"
                android:id="@+id/textView48" />

        </LinearLayout>

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="109dp"
            android:layout_height="match_parent">


            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/txt1s" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/txt2s" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/txt3s" />
        </LinearLayout>

    </LinearLayout>
</RelativeLayout>

ListActivity:

public class ShowSlots extends ListActivity {
    private List<slots> rts;
    String username,parkingName,price,lat,lon,available;
    int availableParkings;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_slot);
        Bundle extras = getIntent().getExtras();
        if (extras != null) {

            username = extras.getString("USERNAME");
            parkingName = extras.getString("PARKINGNAME");
            price = extras.getString("PRICE");
            lat = extras.getString("LAT");
            lon = extras.getString("LON");

            available = extras.getString("AVAILABLE");
            availableParkings = Integer.parseInt(available);
        }
        rts= new ArrayList<slots>();
        for(int i=0;i<availableParkings;i++){
            rts.add(new slots(parkingName,i+1,"Available"));
        }
        refreshDisplay();
    }
    private void refreshDisplay(){
        if(rts.size()==0){
            Toast.makeText(this, "No Reminders in Database", Toast.LENGTH_LONG).show();
        }
        ArrayAdapter<slots> remAdpt = new SlotListAdapter(this,R.layout.slot_block,rts);
        setListAdapter(remAdpt);

    }

}

activity_slot.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.sol.irad.parkme.SlotActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:id="@+id/txtMessage"
        android:text="Parking Slots"
        android:textColor="#00318c"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/txtMessage"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

Upvotes: 0

Views: 73

Answers (1)

Misagh Emamverdi
Misagh Emamverdi

Reputation: 3674

What is the type of slotNum and status fields? If they are int values you cannot call setText like this:

TextView num = (TextView) view.findViewById(R.id.txtSlotSA);
num.setText(slot.slotNum);

TextView status = (TextView) view.findViewById(R.id.txtStatusSA);
status.setText(slot.status);

The problem is when you use int value with setText method, you are passing a resource id. That id doesn't exist and ResourceNotFoundException will thrown. So you need to change your code:

TextView num = (TextView) view.findViewById(R.id.txtSlotSA);
num.setText(String.valueOf(slot.slotNum));

TextView status = (TextView) view.findViewById(R.id.txtStatusSA);
status.setText(String.valueOf(slot.status));

Upvotes: 1

Related Questions