理解简单的Android ListView很困难

时间:2014-02-17 14:17:26

标签: android android-layout listview android-listview

在做了一些搜索之后,我发现了如何在listview中创建适配器并查看一些字符串数据并添加事件监听器。这是代码,

import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity {
    private TextView tv;
    private MediaPlayer player = null; 
    ListView listV;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView)findViewById(R.id.display_result);
        listV = (ListView)findViewById(R.id.listView1);
        final Intent i = new Intent(this,BActivity.class);


         String[] values = new String[] { "C 2 F", "F 2 C", "Currency"};

         ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.activity_list_item, R.id.listView1, values);

         listV.setAdapter(arrayAdapter);

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

              int itemPosition     = position;

              if(itemPosition == 1)
              {
                i.putExtra("identify", "c2f");
                startActivityForResult(i, 1);
                if(player != null)
                    player.stop();
              }
              else if(itemPosition == 2)
              {
                  i.putExtra("identify", "f2c");
                  startActivityForResult(i, 1);
                  if(player != null)
                      player.stop();
              }
              else if(itemPosition == 3)
              {
                  i.putExtra("identify", "currency");
                  startActivityForResult(i, 1);
                  if(player != null)
                      player.stop();
              }


             }

        }); 
    }

当我启动应用程序时,它会崩溃,在行上显示NullPointerException“ArrayAdapter arrayAdapter = new ArrayAdapter(this,android.R.layout.activity_list_item,R.id.listView1,values);”我猜它是因为android.R.layout.activity_list_item,在我看到的例子中,这是android.R.layout.activity_list_item_1,我不知道在哪里定义它或者是什么目的,并且请详细说明填充过程列表视图以及它为何如此复杂。

3 个答案:

答案 0 :(得分:1)

更改为

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, values);

查看来源@

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/frameworks/base/core/res/res/layout/activity_list_item.xml?av=f

我认为您不需要android.R.layout.activity_list_item

另外,您可能希望查看ArrayAdapter

的构造函数

http://developer.android.com/reference/android/widget/ArrayAdapter.html

答案 1 :(得分:1)

我猜这两个论点都是问题:

  • android.R.layout.activity_list_item:

    这是用于行的布局xml。

  • 第二个ID(您使用R.id.listView1):

    这是您在填充数据之前传递的布局中的TextView的ID。在上面指定的布局中,它必须是TextView,因此R.id.listView1可能无效。

答案 2 :(得分:0)

删除这个`R.id.listView1应该是

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.activity_list_item,  values);
listV.setAdapter(arrayAdapter);