List View : Planet Application

 Output


Step 1: Create Layout: item_list_layout

android:layout_height="wrap_content"

<ImageView
        android:id="@+id/imageView"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="16dp"
        android:layout_marginStart="16dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 
    <TextView
        android:id="@+id/planet_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:text="Planet Name"
        android:textSize="28sp"
        app:layout_constraintStart_toEndOf="@+id/imageView"
        app:layout_constraintTop_toTopOf="parent" />
 
    <TextView
        android:id="@+id/moon_count_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="0 Moon"
        android:textSize="20sp"
        app:layout_constraintStart_toStartOf="@+id/planet_name"
        app:layout_constraintTop_toBottomOf="@+id/planet_name" />

Step 2: Create List view in Main Activity


<ListView
        android:id="@+id/listview"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

Step 3: Create a Model Class --- Planet.java

public class Planet {
 
    // Attributes
    private String planetName;
    private String moonCount;
    private int planetImage;
 
    // Constructor
    public Planet(String planetName, String moonCount, int planetImage) {
        this.planetName = planetName;
        this.moonCount = moonCount;
        this.planetImage = planetImage;
    }
 
    // Getters & Setters
 
    public String getPlanetName() {
        return planetName;
    }
 
    public void setPlanetName(String planetName) {
        this.planetName = planetName;
    }
 
    public String getMoonCount() {
        return moonCount;
    }
 
    public void setMoonCount(String moonCount) {
        this.moonCount = moonCount;
    }
 
    public int getPlanetImage() {
        return planetImage;
    }
 
    public void setPlanetImage(int planetImage) {
        this.planetImage = planetImage;
    }
}

Step 4: Create Custom Adapter --- MyCustomAdapter.java


public class MyCustomAdapter extends ArrayAdapter<Planet> {
 
    // Using Custom Layouts --> MyCustomAdapter
    // Using Custom Objects --> extends ArrayAdapter<Planet>
 
    private ArrayList<Planet> planetsArrayList;
    Context context;
 
    public MyCustomAdapter( ArrayList<Planet> planetsArrayList, Context context) {
        super(context, R.layout.item_list_layout, planetsArrayList);
        this.planetsArrayList = planetsArrayList;
        this.context = context;
    }
 
    // View Holder Class: used to cache references to the views within
    //                    an item layout, so that they don't need to be
    //                    repeatedly looked up during scrolling
 
    private static class MyViewHolder{
        TextView planetName;
        TextView moonCount;
        ImageView planetImg;
 
    }
 
    // getView(): used to create and return a view for a
    //            specific item in the list.
 
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        // 1- Get the planet object for the current position
        Planet planets = getItem(position);
 
        // 2- Inflate Layout:
        MyViewHolder myViewHolder;
        final View result;
 
        if (convertView == null){
            myViewHolder = new MyViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(
                    R.layout.item_list_layout,
                    parent,
                    false
            );
 
         // Finding Views:
         myViewHolder.planetName = (TextView) convertView.findViewById(R.id.planet_name);
         myViewHolder.moonCount  = (TextView) convertView.findViewById(R.id.moon_count_text);
         myViewHolder.planetImg  = (ImageView) convertView.findViewById(R.id.imageView);
 
         result = convertView;
 
        convertView.setTag(myViewHolder);
        }else{
            // the view is recycled
            myViewHolder = (MyViewHolder) convertView.getTag();
            result = convertView;
        }
 
        // Getting the data from model class (Planet)
        myViewHolder.planetName.setText(planets.getPlanetName());
        myViewHolder.moonCount.setText(planets.getMoonCount());
        myViewHolder.planetImg.setImageResource(planets.getPlanetImage());
 
        return result;
 
    }
}


Step 5: Create list of view in MainActivity 


public class MainActivity extends AppCompatActivity {
    ListView listView;
    ArrayList<Planet> planetsArrayList;
    private static MyCustomAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 1- AdapterView: a ListView
        listView  = findViewById(R.id.listview);

        // 2- Data Source: ArrayList<Planet>
        planetsArrayList = new ArrayList<>();

        Planet planet3 = new Planet("Earth","1 Moon",R.drawable.earth);
        Planet planet1 = new Planet("Mercury","0 Moons",R.drawable.mercury);
        Planet planet2 = new Planet("Venus", "0 Moons", R.drawable.venus);

        Planet planet4 = new Planet("Mars", "2 Moons", R.drawable.mars);
        Planet planet5 = new Planet("Jupiter", "79 Moons", R.drawable.jupiter);
        Planet planet6 = new Planet("Saturn", "83 Moons", R.drawable.saturn);

        Planet planet7 = new Planet("Uranus", "27 Moons", R.drawable.uranus);
        Planet planet8 = new Planet("Neptune", "14 Moons", R.drawable.neptune);

        planetsArrayList.add(planet1);
        planetsArrayList.add(planet2);
        planetsArrayList.add(planet3);
        planetsArrayList.add(planet4);
        planetsArrayList.add(planet5);
        planetsArrayList.add(planet6);
        planetsArrayList.add(planet7);
        planetsArrayList.add(planet8);


        // Adapter:
        adapter = new MyCustomAdapter(planetsArrayList, getApplicationContext());

        listView.setAdapter(adapter);


        // Handling Click Events

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(
                        MainActivity.this,
                        "Planet Name: " +adapter.getItem(position).getPlanetName(),
                        Toast.LENGTH_SHORT).show();
            }
        });



    }
}



Comments