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 vertical. In it, add a ListView with width and height match_parent and an id android:id=”@+id/lv_list_cars”
Ex 2 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 } }
RUN THE APP
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 ””