java - Android 将字符串添加到 ListView

标签 java android xml listview textview

作为我正在制作的 SMS 应用程序的一部分,我需要在 TextView 更改时动态地将 TextView 中的文本添加到 ListView 中的行...每次 TextView 显示不同内容时添加另一行。

话虽如此,我创建了一个小示例项目来尝试掌握执行此操作的窍门,而且我查阅了很多示例,但仍然无法正常工作。启动应用程序后,它会暂停一会儿然后崩溃。

我正在尝试将来自 main.xml 布局的 TextView(id:tvContent) 中的文本添加到 ListView 的一行中。

这是我的 XML 布局:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/black" >

<Button
    android:id="@+id/addBtn"
    android:text="Add New Item"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:onClick="addItems" >
</Button>

<TextView
    android:id="@+id/tvContent"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hey there!" >     
</TextView>

<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:drawSelectorOnTop="false"
    android:background="@color/black" >     
</ListView>

</LinearLayout>

我的 Activity 类:

package com.example.addtolistview;

import java.util.ArrayList;
import android.os.Bundle;
import android.app.ListActivity;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class ListViewDemo extends ListActivity {

ArrayList<String> listItems=new ArrayList<String>();

ArrayAdapter<String> adapter;

TextView theFact = (TextView) findViewById(R.id.tvContent);
String shareFact = theFact.getText().toString();

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);
    adapter=new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,
            listItems);
    setListAdapter(adapter);

    listItems.add(shareFact);
    adapter.notifyDataSetChanged();
    }
}

这是我的日志猫...我不知道如何在 niceley 问题中实现它...

D/AndroidRuntime(11420): Shutting down VM
W/dalvikvm(11420): threadid=1: thread exiting with uncaught exception (group=0x40c5fa68)
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.addtolistview/com.example.addtolistview.ListViewDemo}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1894)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
at android.app.ActivityThread.access$600(ActivityThread.java:128)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4514)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.app.Activity.findViewById(Activity.java:1794)
at com.example.addtolistview.ListViewDemo.<init>(ListViewDemo.java:15)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1319)
at android.app.Instrumentation.newActivity(Instrumentation.java:1027)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1885)
... 11 more

最佳答案

您想在扩充布局之前获取 TextView,因此它是一个简单的 NullPointerExecption。 更改您的代码:

public class ListViewDemo extends ListActivity {

    ArrayList<String> listItems=new ArrayList<String>();
    ArrayAdapter<String> adapter;

    TextView theFact;
    String shareFact;


    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        theFact = (TextView) findViewById(R.id.tvContent)
        shareFact = theFact.getText().toString();

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

        listItems.add(shareFact);
        adapter.notifyDataSetChanged();
    }
}

如果您按下按钮,它将调用 addItems() 函数(如您所设置的那样),但它尚未实现,因此会产生另一个错误。

public void addItems(View v) {
    listItems.add(shareFact);
    adapter.notifyDataSetChanged();
}

将此函数添加到您的 onCreate() 方法下方,并将 listItems.add() 和 adapter.notifyDataSetChanged() 行移至此新方法。

关于java - Android 将字符串添加到 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12082880/

相关文章:

java - 在多线程环境中与 Java 服务器和 C# 客户端通信时出现管道损坏错误

java - 正则表达式 - Java 以 * 开头并以换行符 (\n) 结尾

android - 同时制作 fragment 过渡动画 View

java - Activity 类中的 getArguments() ?

android - 为什么我缺少 android 相机库?

python - 使用python查找xml中的元素

java - 找不到 JDBC 驱动程序

java - 是否强制/推荐使用 requireExplicitBindings

android - 使用 MVVM Cross 将运行时格式化的 XML 字符串绑定(bind)到 Android TextView

javascript - 如何将下一个上一个按钮添加到弹出窗口?