0

Previously I had crash issues due to the wrong reference to the resource files. Fixed that issue and updated this thread with the logical error that I am getting.
I am new to android and currently learning custom classes and adapter. While working I am facing a problem which is the listview shows the first arraylist item only. I have attached the codes of the required files as well.

Working Activity

package np.com.shresthakiran.tourswoniga;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;

public class KhowpaActivity extends AppCompatActivity {
    ListView lvHeritageList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview_heritage);

        lvHeritageList = findViewById(R.id.lvHeritage);
        ArrayList<Heritages> heritageAryList = new ArrayList<>();
        heritageAryList.add(new Heritages(R.drawable.ic_launcher_background,"Ngatapol", "Taumadi"));
        heritageAryList.add(new Heritages(R.drawable.ic_launcher_foreground, "Dattatreya", "Taumadi"));
        heritageAryList.add(new Heritages(R.drawable.ic_launcher_foreground, "Lu dhwakha", "Lyaaku"));
        heritageAryList.add(new Heritages(R.drawable.ic_launcher_foreground, "55 jhyale Durbar", "Lyaaku"));
        heritageAryList.add(new Heritages(R.drawable.ic_launcher_foreground, "Taleju Bhawani", "Lyaaku"));


        HeritageAdapter heritageAdapter = new HeritageAdapter(KhowpaActivity.this, R.layout.heritages_row, heritageAryList);
        lvHeritageList.setAdapter(heritageAdapter);

    }
}

Custom Adapter

package np.com.shresthakiran.tourswoniga;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.ArrayList;

public class HeritageAdapter extends ArrayAdapter<Heritages> {

    private Context mContext;
    private int mResource;
    public HeritageAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Heritages> objects) {
        super(context, resource, objects);
        this.mContext = context;
        this.mResource = resource;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater layoutInflater =LayoutInflater.from(mContext);
        convertView = layoutInflater.inflate(mResource, parent, false);
        ImageView ivHeritageImage = convertView.findViewById(R.id.ivHeritage);
        TextView tvHeritageName = convertView.findViewById(R.id.tvHeritageName);
        TextView tvHeritageAddress = convertView.findViewById(R.id.tvHeritageAddress);

        ivHeritageImage.setImageResource(getItem(position).getmImageResourceId());
        tvHeritageName.setText(getItem(position).getmHeritageName());
        tvHeritageAddress.setText(getItem(position).getmHeritageAddress());
        return  convertView;
    }
}

Object Class

package np.com.shresthakiran.tourswoniga;

public class Heritages {

    private int mImageResourceId;
    private String mHeritageName;
    private String mHeritageAddress;

    public Heritages(int heritageImageResourceId, String heritageName, String heritageAddress) {
        this.mImageResourceId = heritageImageResourceId;
        this.mHeritageName = heritageName;
        this.mHeritageAddress = heritageAddress;
    }

    public int getmImageResourceId() {
        return mImageResourceId;
    }

    public String getmHeritageName() {
        return mHeritageName;
    }

    public String getmHeritageAddress() {
        return mHeritageAddress;
    }
}

ListView 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:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="100dp"
android:minHeight="100dp">

<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/lvHeritage">
</ListView>

</RelativeLayout>

List Row XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="horizontal"
    android:weightSum="100"
    android:layout_margin="10dp">

    <ImageView
        android:id="@+id/ivHeritage"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="33.33"
        android:padding="2dp"
        android:text="Ngatapol"
        android:layout_marginTop="7dp"
        android:src="@mipmap/ic_launcher"/>



    <LinearLayout
        android:id="@+id/llHeritageInfo"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_weight="66.66"
        android:padding="8dp" >

        <TextView
            android:id="@+id/tvHeritageName"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:textSize="18sp"
            android:textStyle="bold"
            android:text="Ngatapol"
            android:textAppearance="?android:textAppearanceMedium"
            android:padding="2dp"/>

        <TextView
            android:id="@+id/tvHeritageAddress"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:textSize="18sp"
            android:text="Taumadi"
            android:padding="2dp"/>

    </LinearLayout>
</LinearLayout>
leonheess
  • 16,068
  • 14
  • 77
  • 112
  • In ListView layout file, I had made a mistake. I had written android:layout_height="wrap_content" which should have been android:layout_height="match_parent" in actual. Changing android:layout_height="wrap_content" to android:layout_height="match_parent" in ListView XML solved the issue. – Kiran Shrestha Oct 31 '20 at 05:30

1 Answers1

0

listview shows the first item only is because you have set height in heritages_row layout to match_parent which will cover the whole screen height and for the next item, you've to scroll down even if the content of the first item is not covering the whole height.

To make each row to only cover the content its displaying, use wrap_content instead of match_parent.

Ali Ahsan
  • 985
  • 11
  • 16