如何从代码中访问@android:id / list ListView

时间:2013-12-11 23:40:09

标签: android

我正在尝试创建一个列表,并且从列表中单击某个项目我想访问其详细信息,虽然我尝试使用该应用程序但该应用程序仍无法运行:

 ListView list = (ListView) findViewById(R.layout.activity_database);

希望从我的MainActivity访问它,我也尝试过:

 ListView list = getListView();

但我没有成功 这是我的contactListActivity:

       public class ContactListActivity extends ListActivity {
       private UsersDataSource datasource;
       ListView list = (ListView) findViewById(R.layout.activity_database);

       @Override
       public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_database);

       datasource = new UsersDataSource(this);
       datasource.open();

       List<User> values = datasource.getAllUsers();



         ArrayAdapter<User> adapter = new ArrayAdapter<User>(this,          
        android.R.layout.simple_list_item_1, values);
         setListAdapter(adapter);



     list.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
         //TODO Auto-generated method stub
        Intent intent = new Intent(ContactListActivity.this, User.class);
           intent.putExtra("USER_ID", id);
           startActivity(intent);
    }
       });
        }


          public void onClick(View view) {
       @SuppressWarnings("unchecked")
        ArrayAdapter<User> adapter = (ArrayAdapter<User>) getListAdapter();
        User user = null;
       switch (view.getId()) {
          case R.id.add:
        String[] logins = new String[] { "hal", "sal", "saf" };

        int nextInt = new Random().nextInt(3);


        user = datasource.createUser(logins[nextInt], noms[nextInt],prenoms[nextInt] ,     tels[nextInt]);
    adapter.add(user);
 break;
case R.id.delete:
  if (getListAdapter().getCount() > 0) {
    user = (User) getListAdapter().getItem(0);
    datasource.deleteUser(user);
    adapter.remove(user);
  }
  break;
}
adapter.notifyDataSetChanged();
     }
  @Override
      protected void onResume() {
        datasource.open();
        super.onResume();
         }

       @Override
        protected void onPause() {
        datasource.close();
         super.onPause();
           }

        } 

和activity_database.xml

      <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<LinearLayout
    android:id="@+id/group"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <Button
        android:id="@+id/add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Add_New" 
        android:onClick="onClick"/>

    <Button
        android:id="@+id/delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Delete_First" 
        android:onClick="onClick"/>

</LinearLayout>

<ListView
    android:id="@android:id/list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello" />

 </LinearLayout>

2 个答案:

答案 0 :(得分:2)

您应该使用list = getListView()方法拨打onCreate()。请注意,活动中的ListView在系统调用onCreate()之前不会被夸大。特别是,当您依赖于活动布局时,不应初始化内联或构造函数中的任何数据成员。

答案 1 :(得分:0)

为什么要为ListActivity设置ContentView? ListActivity具有默认布局,它只是ListView元素。如果删除setContentView并将list = getListView();放入onCreate()方法,它应该可以正常工作。