如何以编程方式将运行时创建的视图添加到ListActivity而不使用XML

时间:2011-02-11 02:44:16

标签: android listview runtime listactivity

甚至可以在运行时完全创建ListActivity而不使用XML吗?我正在尝试创建一个包含8个项目的列表视图,在四个TextView和四个ToggleButtons之间交替。目标是使用 TextView ToggleButton TextView ToggleButton TextView <的垂直列表/ strong>, ToggleButton TextView ToggleButton

这是我的代码:

public class MyActivity extends ListActivity implements OnCheckedChangeListener
{
    private ViewGroup.LayoutParams widthLayout = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT );
    private TextView[] textItems = new TextView[ 4 ];
    private ToggleButton[] toggleButtons = new ToggleButtons[ 4 ];
    private static final int ID_BASE = 5550;  // unique ID for this activity

    public void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        setupView();
    }
//
    private void setupView() {
        Vector v_itemList = new Vector();
        for ( int i=0; i < 4; i++ ) {
            int t_color = 0xFFFFFF;
            //
            textItems[i] = new TextView( this );
            textItems[i].setText( ""+i+". text line" );
            textItems[i].setColor( t_color );
            t_color -= 0x220022;
            //
            toggleButtons[i] = new ToggleButton( this );
            toggleButtons[i].setTextOff( ""+i+". Off" );
            toggleButtons[i].setTextOn( "On ("+i+")" );
            toggleButtons[i].setId( ID_BASE+i );
            toggleButtons[i].setChecked( i%2 == 1 ? true : false );
            toggleButtons[i].setOnCheckedChangeListener( this );
            //
            v_itemList.addElement( textItems[i] );
            v_itemList.addElement( toggleButtons[i] );
        }
        ArrayAdapter listItemAdapter = new ArrayAdapter( this, android.R.layout.simple_list_item_1, v_itemList );
        this.setListAdapter( listItemAdapter );
    }
}

当我尝试这段代码时,我得到了所有元素的toString()输出的列表列表视图: android.widget.TextView@4376f760 android.widget.ToggleButton@437708c8 android.widget.TextView@43772b10 android.widget.ToggleButton@43772fa0 ......等等......

然后我尝试使用:

添加TextView和ToggleButton
this.addContentView( textItems[i], widthLayout );
this.addContentView( toggleButtons[i], widthLayout );
在for循环中

。但收到一个RuntimeException,你的内容必须有一个ListView,其id属性是'android.R.id.list'

任何帮助都将不胜感激,如果可能的话,我想避免使用任何XML引用。

1 个答案:

答案 0 :(得分:1)

这不是你使用ArrayAdapter的方式。您提供的数组应该是要显示的数据,而不是显示数据的视图。通常,您只能从ArrayAdapter中获取TextView。要获取ToggleButtons,您需要继承ArrayAdapter并覆盖getView()。

您看到的字符串是因为ArrayAdapter将您的视图数组视为要显示的数据。 ArrayAdapter的标准行为是:

  

然而,TextView被引用了它   将填充toString()   数组中的每个对象

有关详情,请参阅ArrayAdapterList View Tutorial的文档。

我很好奇你为什么要在ListView中放置切换按钮。您所描述的内容听起来更适合LinearLayout。