我有一个列表活动。我希望列表中的每个项目都包含文本视图和三个图像视图。但所有项目都排成一列。如何正确配置我的xml和/或代码?
首先,为了确保工作正常,当我编写ListActivity时,我使用getView函数编写了自定义ListAdapter,该函数仅返回TextView,如下所示:
public class TA extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
class custom_adapter implements ListAdapter {
public int getCount() {
return 3;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
}
public View getView(int position, View convertView, ViewGroup parent){
TextView t2View = new TextView(getApplicationContext());
t2View.setText("some text");
return t2View;
}
public int getItemViewType(int position) {
// TODO Auto-generated method stub
return 0;
}
public int getViewTypeCount() {
// TODO Auto-generated method stub
return 1;
}
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
public boolean areAllItemsEnabled() {
// TODO Auto-generated method stub
return false;
}
public boolean isEnabled(int position) {
// TODO Auto-generated method stub
return false;
}
public void registerDataSetObserver(DataSetObserver observer) {
// TODO Auto-generated method stub
}
public void unregisterDataSetObserver(DataSetObserver observer) {
// TODO Auto-generated method stub
}
}
this.setListAdapter(new custom_adapter());
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
}
}
这很好用。然后我尝试用更复杂的视图填充我的列表
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.tt_layout, (ViewGroup) findViewById(R.id.tt_root));
TextView tView = (TextView) layout.findViewById(R.id.tt);
switch(position){
case 0:tView.setText("Pos0");break;
case 1:tView.setText("Pos1");break;
case 2:tView.setText("Pos2");break;
case 3:tView.setText("Pos3");break;
}
return layout;
}
使用此xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tt_root"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#DAAA"
android:weightSum="1">
<TextView android:layout_height="wrap_content" android:id="@+id/tt" android:layout_width="wrap_content" android:text="Some text" android:textAppearance="?android:attr/textAppearanceLarge"></TextView>
<ImageButton android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageButton>
<ImageButton android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageButton>
<ImageButton android:id="@+id/button3" android:layout_height="wrap_content" android:layout_width="wrap_content"></ImageButton>
</LinearLayout>
但是,不是正确的行为,所有项目都是彼此相邻的,而不是作为单独的列表项目。
答案 0 :(得分:0)
它们不会是列表中的单独项目。 为此你应该做这样的事情:
public View getView(int position, View convertView, ViewGroup parent) {
switch(position){
case 0: return new TextView();break;
case 1:return new ImageView();break;
case 2:return new ImageView();break;
case 3:return new ImageView();break;
}
return layout;
}
我希望你有这个主意。
答案 1 :(得分:0)
您想使用垂直方向而不是水平方向:
android:orientation="vertical"