Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android编程教程-教程5_Android_Commonsware - Fatal编程技术网

Android编程教程-教程5

Android编程教程-教程5,android,commonsware,Android,Commonsware,您好,我正在做《Android编程教程》一书中的教程,我在理解教程5时遇到问题。这是主要的Java类: 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.Arr

您好,我正在做《Android编程教程》一书中的教程,我在理解教程5时遇到问题。这是主要的Java类:

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);
      }
    }
  }
}
package tiago.tutorial;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.view.ViewGroup;
导入android.view.LayoutInflater;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.RadioGroup;
导入android.widget.TextView;
导入java.util.ArrayList;
导入java.util.List;
公共类现在扩展活动{
列表模型=新的ArrayList();
RestaurantAdapter适配器=空;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
按钮保存=(按钮)findViewById(R.id.save);
save.setOnClickListener(onSave);
ListView列表=(ListView)findViewById(R.id.restaurants);
适配器=新餐厅适配器();
list.setAdapter(适配器);
}
private View.OnClickListener onSave=new View.OnClickListener(){
公共void onClick(视图v){
餐厅r=新餐厅();
EditText名称=(EditText)findViewById(R.id.name);
EditText地址=(EditText)findViewById(R.id.addr);
r、 setName(name.getText().toString());
r、 setAddress(address.getText().toString());
射线组类型=(射线组)findViewById(R.id.types);
开关(type.getCheckedRadioButtonId()){
案例R.id.坐下:
r、 setType(“坐下”);
打破
案例R.id.取出:
r、 setType(“取出”);
打破
案例R.id.交付:
r、 setType(“交付”);
打破
}
添加(r);
}
};
类RestaurantAdapter扩展了ArrayAdapter{
RestaurantAdapter(){
super(现在是this,R.layout.row,model);
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
RestaurantHolder=null;
如果(行==null){
LayoutInflater充气机=getLayoutInflater();
行=充气机。充气(R.layout.row,父级,false);
持有人=新餐厅持有人(世界其他地区);
row.setTag(支架);
}
否则{
holder=(RestaurantHolder)行。getTag();
}
holder.populateFrom(model.get(position));
返回(行);
}
}
静态类RestaurantHolder{
私有文本视图名称=null;
私有文本视图地址=空;
私有ImageView图标=空;
RestaurantHolder(视图行){
name=(TextView)row.findViewById(R.id.title);
address=(TextView)row.findViewById(R.id.address);
icon=(ImageView)row.findViewById(R.id.icon);
}
无效人群(餐厅r){
name.setText(r.getName());
address.setText(r.getAddress());
if(r.getType().equals(“坐下”)){
图标.setImageResource(R.drawable.ball_红色);
}
else if(r.getType().equals(“take_out”)){
图标.setImageResource(R.drawable.ball_黄色);
}
否则{
图标.setImageResource(R.drawable.ball_绿色);
}
}
}
}
我现在真正的疑问是\getView()\method在哪里调用过?这是可行的,但在代码中我无法理解它何时被调用。如果有人熟悉这本书,你能给我一个关于这段代码中发生了什么的快速解释吗

谢谢:)

getView()
基本上是在试图创建与该
ArrayAdapter
中的元素关联的
视图时调用的

它将返回为
ArrayAdapter
中的元素创建的
视图


以前也有人问过类似的问题,看看这是否对你有帮助


关于这个主题的另一个很好的例子可能有助于解释
Adapaters

的可能重复项,具体来说,在本教程中,
ListView
在适配器上调用
getView()
,因为它需要行,这两个行都用于最初填充列表,以及用户滚动列表时的处理。嘿,感谢您的回复,所以这个“super(Now.this,R.layout.row,model);”正试图创建一个视图,对吗?所以同时它会调用getView(),它是在import的?在我的代码示例中,该方法被重写,以保证在调用时它会执行我们想要的操作??谢谢你的帮助<代码>超级(Now.this,R.layout.row,model)
基本上只是使用您提供的参数初始化
ArrayAdapter
。这里有一个指向
ArrayAdapter
源代码的链接,可以让您更好地了解
super(…)
正在做什么。我现在明白了:)谢谢你的回复,这对我帮助很大!因此getView在super上被覆盖(现在是this、R.layout.row、model);