甚至可以在运行时完全创建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和ToggleButtonthis.addContentView( textItems[i], widthLayout );
this.addContentView( toggleButtons[i], widthLayout );
在for循环中。但收到一个RuntimeException,你的内容必须有一个ListView,其id属性是'android.R.id.list'
任何帮助都将不胜感激,如果可能的话,我想避免使用任何XML引用。
答案 0 :(得分:1)
这不是你使用ArrayAdapter的方式。您提供的数组应该是要显示的数据,而不是显示数据的视图。通常,您只能从ArrayAdapter中获取TextView。要获取ToggleButtons,您需要继承ArrayAdapter并覆盖getView()。
您看到的字符串是因为ArrayAdapter将您的视图数组视为要显示的数据。 ArrayAdapter的标准行为是:
然而,TextView被引用了它 将填充toString() 数组中的每个对象
有关详情,请参阅ArrayAdapter和List View Tutorial的文档。
我很好奇你为什么要在ListView中放置切换按钮。您所描述的内容听起来更适合LinearLayout。