This is an old revision of the document!
Ex 0 Make a new project and do not generate a xml file.
Add the next image into the project
Ex 1 (If you have generated a xml file in the ex 0, delete it) Add a new xml file named activity_main.xml and make it a LinearLayout with width match_parent and height wrap_content with the orientation horizontal. In it, add a ListView with width and height match_parent
Ex 3 Create another xml file (a LinearLayout ) named list_item.xml. The orientation shoud be horizontal and the width and the height shoud be wrap_content.
In the LinearLayout, add an ImageView(with id iv_image_element) and a TextView(with id tv_name_element), both with width and height wrap_content.
Ex 3 In the MainActivity.java file create another 2 classes (not in class MainActivity): class Car with a String name, and a int imageResource and another class named TagCar with a TextView name and a ImageView image.
Ex 4 Create a new java file named CarAdapter which extends BaseAdapter. In it, add an Activity object named context, and an ArrayList of Car named cars.
Create a constructor which receive an Activity and initializate the context, and the cars arrayList, also add the next function addCar:
Activity context;
ArrayList<Car> cars;
public CarAdapter (Activity context) {
//TODO
}
public void addCar(String nameCar, int resource){
Car car = new Car();
car.name = nameCar;
car.imageResource = resource;
cars.add(car);
this.notifyDataSetChanged();
}
Ex 5 Implement the 4 methods, and in the getView function add this text:
public View getView(int i, View view, ViewGroup viewGroup) {
View element;
LayoutInflater layoutInflater = context.getLayoutInflater();
element = layoutInflater.inflate(R.layout.list_item, null);
TagCar car = new TagCar();
car.name = element.findViewById(R.id.tv_name_element);
car.image = element.findViewById(R.id.iv_image_element);
element.setTag(car);
TagCar tag = (TagCar) element.getTag();
tag.name.setText(cars.get(i).name);
tag.image.setImageResource(cars.get(i).imageResource);
return element;
}
Look in Course 4 - List, adapters, recylcing slides 29-31 and tell the teaching assistant if this method is efficient or not (if it's not, make it efficient).
Ex 6 In MainActivity class, in the onCreate function, connect the ListView from the java to the xml (TODO 1)
TODO 2: initializate the object carAdapter(2)
TODO 3: set the carAdapter adapter for list of cars (3).
TODO 4: in the carAdapter, add 4 cars (with addCar function).
public class MainActivity extends Activity {
private ListView listOfCars;
CarAdapter carAdapter;
private EditText addNewCar;
private Button addButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// TODO 1, 2, 3,4
}
}
Ex 7 In the activity_main.xml, in the linearLayout , add another LinearLayout (width match parent and height wrap_content, orientation horizontal) and add in it an EditText (with id ed_new_car, height wrap_content and width 200dp) and a Button (id b_add_car, width and height wrap_content)
Ex 8 In MainActivity,in onCreate function, connect the EditText and the Button from the java to the xml file. Set an onClickListener on the button: when clicked, get the Text from the editText and convert it to String, and add a new car in the carAdapter using the name from the editText. After that, set the editText's text to ””