Android 如何以编程方式将运行时创建的视图添加到没有XML的ListActivity中

Android 如何以编程方式将运行时创建的视图添加到没有XML的ListActivity中,android,listview,runtime,listactivity,Android,Listview,Runtime,Listactivity,甚至可以在运行时完全不使用XML创建ListActivity吗?我正在尝试创建一个包含8项的列表视图,在四个文本视图和四个切换按钮之间切换。目标是创建一个垂直列表,其中包含文本视图、切换按钮、文本视图、切换按钮、文本视图、切换按钮、文本视图、切换按钮 这是我的密码: public class MyActivity extends ListActivity implements OnCheckedChangeListener { private ViewGroup.LayoutParams

甚至可以在运行时完全不使用XML创建ListActivity吗?我正在尝试创建一个包含8项的列表视图,在四个文本视图和四个切换按钮之间切换。目标是创建一个垂直列表,其中包含文本视图、切换按钮、文本视图、切换按钮、文本视图、切换按钮、文本视图、切换按钮

这是我的密码:

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 );
    }
}
在for循环中。但收到RuntimeException,您的内容必须具有id属性为“android.R.id.list”的ListView


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

这不是使用ArrayAdapter的方式。给它的数组应该是要显示的数据,而不是要显示数据的视图。通常,您只能从ArrayAdapter获取文本视图。要获得切换按钮,需要将ArrayAdapter子类化并覆盖getView()

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

无论文本视图是如何引用的,它都是 将用的toString()填充 数组中的每个对象

有关更多信息,请参阅文档和


我很好奇为什么要在列表视图中设置切换按钮。您所描述的内容听起来更适合线性布局。

我想知道为什么不能使用XML?我正在尝试学习如何创建在运行时可调整的灵活UI,而不依赖于静态XML解析。一旦我学会了编程UI,XML将成为蛋糕。切换按钮只是任何非文本UI组件的替代品。我的目标是了解如何在运行时创建动态UI,可以根据任何设备和屏幕大小进行调整。
this.addContentView( textItems[i], widthLayout );
this.addContentView( toggleButtons[i], widthLayout );