以编程方式创建ListView

15

大家好,我是 Android 新手。请问以下代码有什么问题:

public class ListApp extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView lText = new TextView(this);
        lText.setId(0);       

        ListView lView = new ListView(this);
        String[] lStr = new String[]{"AA","BB", "CC"};
        ArrayAdapter lAdap = new ArrayAdapter(this,lText.getId(),lStr);
        lView.setAdapter(lAdap);
        lView.setFocusableInTouchMode(true);        

        setContentView(lView);
    }
}

首先,您正在错误地使用ArrayAdapter构造函数。您需要使用两个参数版本:(Context context,int textViewResourceId)。 - moonlightcheese
ArrayAdapter<String> lAdap = new ArrayAdapter<String>(this, lText.getId()); 适配器<String> lAdap = 新适配器<String>(this, lText.getId()); - moonlightcheese
5个回答

23

这里有一个解决方案,不需要编写任何XML布局。它尽可能使用标准的Android布局,无需膨胀:

Dialog dialog = new Dialog(this);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select Color Mode");

ListView modeList = new ListView(this);
String[] stringArray = new String[] { "Bright Mode", "Normal Mode" };
ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, stringArray);
modeList.setAdapter(modeAdapter);

builder.setView(modeList);
dialog = builder.create();

2
你可以将这个程序适配成适用于ListActivity的形式。 - moonlightcheese
我完全复制了你的代码,但是没有生成任何列表视图。 - Wayne Tun
抱歉,我现在明白了,你的代码缺少dialog.show();。 - Wayne Tun

4

请尝试以下方法...

将以下代码粘贴到list_item.xml中。

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"
    android:padding="10dp" 
    android:textSize="16sp" android:textColor="#ffffff" android:textStyle="bold" android:background="@drawable/border_cell">
</TextView>

这里是活动类(Activity Class)的代码示例:

    public class UsersListActivity extends ListActivity{    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);         
            String[] statesList = {"listItem 1", "listItem 2", "listItem 3"};
            setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,
                    statesList)); 
            ListView lv = getListView(); 

            lv.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {


                     Toast.makeText(getApplicationContext(),
                     "You selected : "+((TextView) view).getText(), Toast.LENGTH_SHORT).show();
     }
            });

        }

}

1
最佳实践是将视图(XML布局)和控制器(Activity)分开。
如果您不想这样做,请尝试放置。
 setContentView(lView);

onCreate的开头


0
public class ListApp extends ListActivity

我能否在Activity中添加ListView?我不想继承ListActiviy。这可行吗? - Nick
我有同样的问题,将一个项目从iPhone和Blackberry移植并使用Android的XML是需要重新设计...呃。如果可以轻松地程序化创建这些东西,那会使生活变得简单许多,看起来应该是可能的,但嘿,我还是新手在Android :) - sradforth

0
创建一个包含ListView的布局XML文件,并使用findViewById方法将其适配器设置到ListView上,在此之前先将内容视图设置为你的布局。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接