通过引用这个,我创建了以下内容:
main.xml中
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:id="@+id/addBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="addItems"
android:text="Add New Item" />
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false" />
MainActivity.java
public class MainActivity extends Activity {
ListView list;
ArrayList listItems = new ArrayList();
ArrayAdapter adapter;
int clickCounter = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list = (ListView) findViewById(R.id.list);
adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, listItems);
list.setAdapter(adapter);
list.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view,
int position, long id) {
String item = list.getItemAtPosition(position).toString();
Log.i("MainActivity", "Selected = " + item);
}
});
}
public void addItems(View v) {
listItems.add("Clicked : " + clickCounter++);
adapter.notifyDataSetChanged();
}
}
而且它运作完美.但是根据要求,我的每个listview行不仅仅是一个字符串.相反,它将是由存储在row.xml中的imageview和textview组成的视图集合.
现在我的疑问是:
>什么将替换adapter = new ArrayAdapter< String>(这,android.R.layout.simple_list_item_1,listItems); ?它是adapter = new ArrayAdapter< String>(this,R.layout.row,listItems); ??
>我如何参考每行的imageview和textview?如何设置和获取数据?如何识别他们的点击事件?
>是否必须使用适配器?或者我能逃脱它吗?
任何帮助赞赏.
解决方法:
But as per requirements, my each listview row won’t just be a single
string. Instead, it’ll be collection of views consisting of imageview
and textviews stored in row.xml.
=>您正在显示的ListView正在使用普通适配器.如果您希望项目包含多个视图,如Imageview,Textview或任何视图,则必须通过扩展BaseAdapter或ArrayAdapter来定义自定义适配器类.
What will replace adapter = new
ArrayAdapter(this,android.R.layout.simple_list_item_1,
listItems); ? Will it be adapter = new
ArrayAdapter(this,R.layout.row, listItems); ??
=>这里ArrayAdapter不起作用,因为你的行xml布局可能包含不同的视图,如ImageView,TextView,Button或任何其他小部件.所以我建议你定义自己的适配器类,你必须覆盖getView()方法.
How do I refer to imageview and textviews of each row? How do I set
and get data from them? How do I recognize their click events?
=>如上所述,一旦定义了自定义适配器类,就必须覆盖getView()方法,在该方法中可以找到行xml布局文件的任何视图,引用它并设置/显示所需的任何数据.
Is use of Adapter must? or can I get away with it?
=>是的必须,如果没有适配器,您将无法在GridView,ListView,Spinner,Gallery等数据绑定小部件中显示.
定义自定义适配器的示例: