Android Programming tutorials - Tutorial 5

こ雲淡風輕ζ 提交于 2019-12-23 05:17:38

问题


Hello, I am doing tutorials from book "Android programming tutorials", I am having problems understanding Tutorial 5. This is the main Java class:

package tiago.tutorial;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;

public class Now extends Activity {
  List<Restaurant> model = new ArrayList<Restaurant>();
  RestaurantAdapter adapter = null;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button save = (Button) findViewById(R.id.save);

    save.setOnClickListener(onSave);

    ListView list = (ListView) findViewById(R.id.restaurants);

    adapter = new RestaurantAdapter();
    list.setAdapter(adapter);
  }

  private View.OnClickListener onSave = new View.OnClickListener() {
    public void onClick(View v) {
      Restaurant r = new Restaurant();

      EditText name = (EditText) findViewById(R.id.name);
      EditText address = (EditText) findViewById(R.id.addr);

      r.setName(name.getText().toString());
      r.setAddress(address.getText().toString());

      RadioGroup types = (RadioGroup) findViewById(R.id.types);

      switch (types.getCheckedRadioButtonId()) {
        case R.id.sit_down:
          r.setType("sit_down");
          break;

        case R.id.take_out:
          r.setType("take_out");
          break;

        case R.id.delivery:
          r.setType("delivery");
          break;
      }

      adapter.add(r);
    }
  };

  class RestaurantAdapter extends ArrayAdapter<Restaurant> {
    RestaurantAdapter() {
      super(Now.this, R.layout.row, model);
    }

    public View getView(int position, View convertView, ViewGroup parent) {
      View row = convertView;
      RestaurantHolder holder = null;

      if (row==null) {                          
        LayoutInflater inflater = getLayoutInflater();

        row=inflater.inflate(R.layout.row, parent, false);
        holder = new RestaurantHolder(row);
        row.setTag(holder);
      }
      else {
        holder = (RestaurantHolder) row.getTag();
      }

      holder.populateFrom(model.get(position));

      return(row);
    }
  }

  static class RestaurantHolder {
    private TextView name = null;
    private TextView address = null;
    private ImageView icon = null;

    RestaurantHolder(View row) {
      name = (TextView) row.findViewById(R.id.title);
      address = (TextView) row.findViewById(R.id.address);
      icon = (ImageView) row.findViewById(R.id.icon);
    }

    void populateFrom(Restaurant r) {
      name.setText(r.getName());
      address.setText(r.getAddress());

      if (r.getType().equals("sit_down")) {
        icon.setImageResource(R.drawable.ball_red);
      }
      else if (r.getType().equals("take_out")) {
        icon.setImageResource(R.drawable.ball_yellow);
      }
      else {
        icon.setImageResource(R.drawable.ball_green);
      }
    }
  }
}

My real doubt at this moment is where is \getView()\ method ever called? This is working, but in code I cannot understand when is it called. If anyone is familiar with this book, please can you provide me a fast explanation about what's happening in this code?

Thanks :)


回答1:


getView() is basically called when something is trying to create the View that is associated with an element in that ArrayAdapter.

It will return the View that is created for the element in the ArrayAdapter.


A similar question has been asked before, see if this question helps you any.

Another great tutorial on this subject that may be helpful in explaining what is going on with Adapaters.



来源:https://stackoverflow.com/questions/11905689/android-programming-tutorials-tutorial-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!