在xml的listActivity项中设置自定义视图

时间:2011-08-19 19:34:26

标签: android

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

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

2 个答案:

答案 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"