Android 从xml在listActivity项中设置cutom视图
我有一个活动列表。我希望列表中的每个项目都包含一个文本视图和三个图像视图。但是所有的物品都排好了。如何正确配置xml和/或代码 首先,为了确保一切正常,在编写ListActivity时,我使用getView函数编写了自定义ListAdapter,该函数只返回TextView,如下所示:Android 从xml在listActivity项中设置cutom视图,android,Android,我有一个活动列表。我希望列表中的每个项目都包含一个文本视图和三个图像视图。但是所有的物品都排好了。如何正确配置xml和/或代码 首先,为了确保一切正常,在编写ListActivity时,我使用getView函数编写了自定义ListAdapter,该函数只返回TextView,如下所示: public class TA extends ListActivity { @Override public void onCreate(Bundle savedInstanceState)
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>
但是,所有项目不是正确的行为,而是彼此相邻堆叠,而不是作为单独的列表项目。它们在列表中不会是单独的项目。 为此,您应该执行以下操作:
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;
}
我希望你有这个想法。你想使用垂直方向而不是水平方向:
android:方向=垂直
您的答案是可行的,但是问题涉及xml布局的膨胀,而不是代码中布局的构造。最终,这似乎是实现问题意图的最佳方式,尽管它没有直接回答问题,请参阅unluddite在下面的答案中给出的链接。如果进行了此更改,则3个视图将垂直堆叠在一个列表项中,我希望3个视图位于单独的列表项中。请参阅此处,谢谢,似乎比仅在代码中构造视图要复杂得多,请按上面的答案进行排序。您不必以编程方式构造视图。您可以在XML中定义它们,并在getView中根据需要进行膨胀。这基本上是我的问题,为什么我的代码不这样做?我尝试了您的建议,它确实使视图垂直排列,但它们仍然分组在一个巨大的列表项中,它们没有给我单独的项