这个是代码,我都是照着示例做的,但还是不行,查了一天了,到底是哪里出问题呢 package cn.com.ava.lesson4_fancy_view; import android.content.Context; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; import cn.com.ava.lesson4_fancy_view.Model.Address; public class MainActivity extends Activity { private EditText et_name; private EditText et_address; private Button bt_save; private RadioGroup rg_types; private RadioButton rb_take_out; private RadioButton rb_sit_down; private RadioButton rb_delivery; private ListView lv_address; private ArrayAdapter<Address> adapter; private List<Address> listAddress = new ArrayList<Address>(); private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.bt_save = (Button) this.findViewById(R.id.bt_save); this.bt_save.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { et_name = (EditText) MainActivity.this.findViewById(R.id.et_name); et_address = (EditText) MainActivity.this.findViewById(R.id.et_address); rg_types = (RadioGroup) MainActivity.this.findViewById(R.id.rg_types); rb_take_out = (RadioButton) MainActivity.this.findViewById(R.id.rb_take_out); rb_sit_down = (RadioButton) MainActivity.this.findViewById(R.id.rb_sit_down); rb_delivery = (RadioButton) MainActivity.this.findViewById(R.id.rb_delivery); Address address = new Address(); address.setName(et_name.getText().toString()); address.setAddress(et_address.getText().toString()); switch (rg_types.getCheckedRadioButtonId()) { case R.id.rb_take_out: address.setType(MainActivity.this.getString(R.string.take_out)); break; case R.id.rb_sit_down: address.setType(MainActivity.this.getString(R.string.sit_down)); break; case R.id.rb_delivery: address.setType(MainActivity.this.getString(R.string.delivery)); break; } Toast.makeText(MainActivity.this, address.toString(), Toast.LENGTH_SHORT) .show(); adapter.add(address); } }); lv_address = (ListView) findViewById(R.id.lv_address); Log.d(TAG, "设置 Fancy List Item"); this.adapter = new ArrayAdapter<Address>(MainActivity.this, R.layout.fancy_list_item, listAddress); lv_address.setAdapter(this.adapter); } class AddressAdapter extends ArrayAdapter<Address> { public AddressAdapter() { super(MainActivity.this, R.layout.fancy_list_item, listAddress); Log.d(TAG, "构造Fancy List Item"); } @Override public int getCount() { return super.getCount(); } @Override public long getItemId(int position) { return super.getItemId(position); } @Override public View getView(int position, View convertView, ViewGroup parent) { //return super.getView(position, convertView, parent); View rowView = convertView; AddressHolder holder = null; if (rowView == null) { Log.d(TAG, "位置" + position + ";开始加载View"); LayoutInflater layoutInflater = getLayoutInflater(); rowView = layoutInflater.inflate(R.layout.fancy_list_item, parent, false); Log.d(TAG, "位置" + position + ";开始加载完成"); holder = new AddressHolder(rowView); Log.d(TAG, "位置" + position + ";设置完成"); rowView.setTag(holder); } else { holder = (AddressHolder) rowView.getTag(); } holder.populateFrom(listAddress.get(position)); return (rowView); } } static class AddressHolder { private TextView name = null; private TextView address = null; private ImageView icon = null; private View rowView = null; AddressHolder(View rowView) { this.rowView = rowView; name = (TextView) rowView.findViewById(R.id.et_name); address = (TextView) rowView.findViewById(R.id.et_address); icon = (ImageView) rowView.findViewById(R.id.iv_icon); } void populateFrom(Address 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); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 这个是我的Item XML <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/iv_icon" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginRight="4px" > </ImageView> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/tv_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center_vertical" android:textStyle="bold" android:singleLine="true" android:ellipsize="end" ></TextView> <TextView android:id="@+id/tv_address" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:textStyle="bold" android:singleLine="true" android:ellipsize="end" ></TextView> </LinearLayout> </LinearLayout> |
|
![]() |
再附上Activity的
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".MainActivity"> <TableLayout android:id="@+id/tb_details" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:stretchColumns="1"> <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓名"> </TextView> <EditText android:id="@+id/et_name" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText> </TableRow> <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="地址"> </TextView> <EditText android:id="@+id/et_address" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText> </TableRow> <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="类型"> </TextView> <RadioGroup android:id="@+id/rg_types" android:layout_width="fill_parent" android:layout_height="wrap_content"> <RadioButton android:id="@+id/rb_take_out" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/take_out"></RadioButton> <RadioButton android:id="@+id/rb_sit_down" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/sit_down"/> <RadioButton android:id="@+id/rb_delivery" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/delivery"></RadioButton> </RadioGroup> </TableRow> <Button android:id="@+id/bt_save" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/save"/> </TableLayout> <ListView android:id="@+id/lv_address" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_above="@id/tb_details" > </ListView> </RelativeLayout> |
![]() |
版本所用的SKD是 4.2.2
|
![]() 100分 |
|
![]() |
学习学习ing
|
![]() |
我是 new ArrayAdapter<String> (context,自己编的XML,list)时 出错。
出错信息和你的一样 经研究 出错在 自己编的xml 上, 如果把这个换成android.R.layout.simple_list_item_1 就没问题了 说明是 你提供给 ArrayAdapter 的xml 文件 不符合 ArrayAdapter 的要求 |
![]() |
谢谢大哥 |