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" />
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" />
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" />
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" />
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;
}
}
private String planetName;
private String moonCount;
private int planetImage;
public Planet(String planetName, String moonCount, int planetImage) {
this.planetName = planetName;
this.moonCount = moonCount;
this.planetImage = planetImage;
}
return planetName;
}
this.planetName = planetName;
}
return moonCount;
}
this.moonCount = moonCount;
}
return 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;
}
}
// Using Custom Objects --> extends ArrayAdapter<Planet>
Context context;
super(context, R.layout.item_list_layout, planetsArrayList);
this.planetsArrayList = planetsArrayList;
this.context = context;
}
// an item layout, so that they don't need to be
// repeatedly looked up during scrolling
TextView planetName;
TextView moonCount;
ImageView planetImg;
// specific item in the list.
@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);
MyViewHolder myViewHolder;
final View result;
myViewHolder = new MyViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(
R.layout.item_list_layout,
parent,
false
);
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);
}else{
// the view is recycled
myViewHolder = (MyViewHolder) convertView.getTag();
result = convertView;
}
myViewHolder.planetName.setText(planets.getPlanetName());
myViewHolder.moonCount.setText(planets.getMoonCount());
myViewHolder.planetImg.setImageResource(planets.getPlanetImage());
}
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
Post a Comment