小编典典

ListView在setOnItemClickListener上产生nullpointerexception

java

我正在尝试通过一些教程代码来工作,并添加一个OnItemClick侦听器,但是当它击中侦听器并导致我的应用崩溃时,总是引发异常。这是我在Android环境中进行的首次尝试,因此我正在尝试学习所有这些东西之间的相互关系。

这是我尝试过的:

import java.util.ArrayList;
import java.util.List;

import org.json.JSONObject;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;


public class RssActivity extends ListActivity{

private RssListAdapter adapter;

private OnItemClickListener newsSelectListener = new OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            AlertDialog.Builder alert=new AlertDialog.Builder(RssActivity.this);
            alert.setTitle("Clicked").setMessage("Item clicked").setNeutralButton("OK", null).show();

        }
    };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    List<JSONObject> jobs = new ArrayList<JSONObject>();
    try {
        jobs = RssReader.getLatestRssFeed();
    } catch (Exception e) {
        Log.e("RSS ERROR", "Error loading RSS Feed Stream >> " + e.getMessage() + " //" + e.toString());
    }

    adapter = new RssListAdapter(this,jobs);
    setListAdapter(adapter);

    ListView lv = (ListView)findViewById(R.id.list);
    lv.setOnItemClickListener(newsSelectListener);

    }
}

我也尝试将setListAdapter更改为lv.setListAdapter,但这似乎不是有效的声明。

我想念什么?


阅读 256

收藏
2020-11-30

共1个答案

小编典典

ListActivity不要求你指定一个布局通过setContentView()那就是如果你想显示 只有
一个列表,但如果添加了另一种观点,你的ListView应该包含的android:id属性设置为@android:id/list像下面这样的XML

<ListView
  android:id="@android:id/list"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" >
</ListView>

尝试更改您的代码

ListView lv = (ListView)findViewById(R.id.list);

对此

ListView lv = getListView();
lv.setOnItemClickListener(newsSelectListener);
2020-11-30