ListView在setOnItemClickListener上产生nullpointerexception
我正在尝试使用一些教程代码并添加一个OnItemClick侦听器,但在它击中侦听器并使我的应用程序崩溃时继续抛出exception。 这是我在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 jobs = new ArrayList(); 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,但这似乎不是一个有效的语句。
我错过了什么?
ListActivity不要求你通过setContentView()
分配布局,如果你只想显示一个列表但是如果你添加另一个视图,你的ListView应该包含设置为@android:id/list
的android:id
属性@android:id/list
like这个xml如下
尝试更改您的代码
ListView lv = (ListView)findViewById(R.id.list);
对此
ListView lv = getListView(); lv.setOnItemClickListener(newsSelectListener);
我不确定你的代码是否有用
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(); } };
但在我看来,我经常在Adapter
类的getView
方法中将setOnClickListener()
添加到convertView中
public View getView(final int position, View convertView, ViewGroup parent) { ...................... convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //Do Somethings in here } } });
我看不到你在哪里初始化你的布局…所以:
Activity
类负责为您创建一个窗口,您可以在其中使用setContentView(View)
放置UI。
onCreate(Bundle)
方法初始化您的Activity
。 您通常使用xml布局调用setContentView(int)
( main.xml
或定义UI的xml)。 把它super.onCreate(..)
关于这个例外:
java.lang.RuntimeException: Unable to start activity ComponentInfo{}:
如果你的Activity
已经存在,请检查你的AndroidManifest.xml
:
如果您的问题尚未解决,请使用您的Logcat
并将Log.d
放入您的方法中以查看它崩溃的位置。
编辑
好的 – 你在哪里设置setContentView(...)
? lv
ListView lv = (ListView) findViewById(R.id.list);
为null,因为您没有设置contentView。
可能原因是:您在setNeutralButton("OK", null)
中的AlertDialog.Builder
中将setNeutralButton("OK", null)
设置为null
。
因此,当您单击“确定”时,Android会调用(内部)类似这样的内容:
neutralButtonListener.onClick(...);
而neutralButtonListener
为null
。 所以你应该至少提供空的监听器。
- 有没有一种很好的方法将video从Android流式传输到RTSP服务器?
- 如何在Android OpenCV中执行图像RGB规范化?
- RxJava在列表上执行操作并返回一个observable
- 错误:java.lang.ClassNotFoundException:更新android studio 3.0.0时找不到类org.openjdk.jdi.ReferenceType
- 如何在android中修复ArithmeticException错误
- Android应用中setText上的空对象引用
- 为什么在Android中的Zone更改时,DateTimeZone.getDefault()不会更新
- Android汉堡/箭头图标动态改变颜色
- 我的标签小部件不显示图片图标