这个问题可能看起来像是重复的问题。但那些问题并没有帮助我解决我的问题。
我想在列表(婴儿名称)上实现“onClick”事件,该事件填充了SimpleCursorAdapter。当用户点击某个名称时,将生成一个显示数据库中记录“id”的Toast。
这是我的代码 -
public class CommonNames extends Activity {
TextView rowview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.common_names);
rowview = (TextView)findViewById(R.id.commonName);
CommonNamesAdapter cnTable = new CommonNamesAdapter(this);
ListView cnListView = (ListView)findViewById(R.id.common_name_layout);
cnTable.open(getApplicationContext());
Cursor c = cnTable.fetch_all_common_names_only();
startManagingCursor(c);
if(c!=null){
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.listview,
c,
new String[] {c.getColumnName(0), c.getColumnName(1)},
new int[] {R.id.rowLayout,R.id.commonName});
cnListView.setAdapter(adapter);
}
rowview.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Context context = getApplicationContext();
String id = context.getString(R.id.commonName);
CharSequence text = "This id of this item is... "+id ;
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
});
cnTable.close();
}
这是listview.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rowLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/commonName"
android:layout_alignParentLeft="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:paddingLeft="14dp"
android:paddingTop="4dp"
android:paddingBottom="4dp"
/>
</LinearLayout>
这是common_names.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ListView
android:id = "@+id/common_name_layout"
android:layout_width="fill_parent"
android:layout_height= "wrap_content" >
</ListView>
</LinearLayout>
当我运行我的应用程序时,我得到一个运行时NullPointerException。这是LogCat。请帮我解决这个问题。
11-13 18:23:27.852: INFO/COMMON_NAMES_TABLE(775): Inserting record...
11-13 18:23:27.902: INFO/COMMON_NAMES_TABLE(775): OPening DataBase Connection....
11-13 18:23:28.002: DEBUG/AndroidRuntime(775): Shutting down VM
11-13 18:23:28.002: WARN/dalvikvm(775): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): FATAL EXCEPTION: main
11-13 18:23:28.012: ERROR/AndroidRuntime(775): java.lang.RuntimeException: Unable to start activity ComponentInfo{balu.android/balu.android.CommonNames}: java.lang.NullPointerException
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at android.os.Handler.dispatchMessage(Handler.java:99)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at android.os.Looper.loop(Looper.java:123)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at java.lang.reflect.Method.invokeNative(Native Method)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at java.lang.reflect.Method.invoke(Method.java:521)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at dalvik.system.NativeStart.main(Native Method)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): Caused by: java.lang.NullPointerException
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at balu.android.CommonNames.onCreate(CommonNames.java:42)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-13 18:23:28.012: ERROR/AndroidRuntime(775): ... 11 more
11-13 18:23:28.032: WARN/ActivityManager(59): Force finishing activity balu.android/.CommonNames
11-13 18:23:28.032: WARN/ActivityManager(59): Force finishing activity balu.android/.Select
11-13 18:23:28.585: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{45025710 balu.android/.CommonNames}
11-13 18:23:31.192: INFO/Process(775): Sending signal. PID: 775 SIG: 9
11-13 18:23:31.212: INFO/ActivityManager(59): Process balu.android (pid 775) has died.
11-13 18:23:31.212: INFO/WindowManager(59): WIN DEATH: Window{45084738 balu.android/balu.android.BabyNamesAppActivity paused=false}
谢谢。
答案 0 :(得分:2)
您不应在行视图上设置onClickListener。这只会将onClick事件设置为一行,如果没有内容则会崩溃(这可能是你的问题)
尝试使用
cnListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id)
{
}
});
答案 1 :(得分:0)
您的common_names布局没有ID为commonName
的视图,因此rowview
为空,roview.setOnClickListener()
为NPE。
实际上是
的错误信息...(775): Caused by: java.lang.NullPointerException
...(775): at balu.android.CommonNames.onCreate(CommonNames.java:42)
你粘贴的堆栈跟踪中的应该很容易找到它,因为NPE在CommonNames.java第42行