Android 从xml在listActivity项中设置cutom视图

Android 从xml在listActivity项中设置cutom视图,android,Android,我有一个活动列表。我希望列表中的每个项目都包含一个文本视图和三个图像视图。但是所有的物品都排好了。如何正确配置xml和/或代码 首先,为了确保一切正常,在编写ListActivity时,我使用getView函数编写了自定义ListAdapter,该函数只返回TextView,如下所示: public class TA extends ListActivity { @Override public void onCreate(Bundle savedInstanceState)

我有一个活动列表。我希望列表中的每个项目都包含一个文本视图和三个图像视图。但是所有的物品都排好了。如何正确配置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>

但是,所有项目不是正确的行为,而是彼此相邻堆叠,而不是作为单独的列表项目。

它们在列表中不会是单独的项目。 为此,您应该执行以下操作:

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中根据需要进行膨胀。这基本上是我的问题,为什么我的代码不这样做?我尝试了您的建议,它确实使视图垂直排列,但它们仍然分组在一个巨大的列表项中,它们没有给我单独的项