java - 通过 edittext 将项目添加到 ListView

标签 java android

我有edittext、按钮和 ListView ,我想从edittext添加项目到listview,当我单击edittext添加到listview的按钮文本时,但会出现此错误“不幸的是,列表已停止。”

> main.xml 代码为:

<EditText 
    android:id="@+id/EdtInput"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:hint="@string/StInput"
    />
<Button 
    android:id="@+id/BtnAdd"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/StAdd"
    android:layout_toRightOf="@+id/EdtInput"
    />

<ListView 
    android:id="@+id/LstItem"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/EdtInput"
    android:layout_alignLeft="@+id/EdtInput"
    ></ListView>

> MainActivity.java 代码是:

包 com.saly.list;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final EditText ET=(EditText) findViewById(R.id.EdtInput);
    final String StInput=ET.getText().toString();
    final ListView LV=(ListView) findViewById(R.id.LstItem);
    final ArrayList<String> ArLi=new ArrayList<String>();
    final ArrayAdapter<String> ArAd=new ArrayAdapter<String>(this, R.layout.main,ArLi);
    LV.setAdapter(ArAd);
    Button Add=(Button) findViewById(R.id.BtnAdd);
    Add.setOnClickListener(new OnClickListener() {          
        public void onClick(View v) {
            ArLi.add(StInput);
            ArAd.notifyDataSetChanged();
            ET.setText("");
        }       
    });     
}
}

这是 LogCat 错误:

02-27 16:44:06.369: I/Adreno-EGL(21719): <qeglDrvAPI_eglInitialize:320>: EGL 1.4 QUALCOMM Build: I0404c4692afb8623f95c43aeb6d5e13ed4b30ddbDate: 11/06/13
02-27 16:44:06.409: D/OpenGLRenderer(21719): Enabling debug mode 0
02-27 16:44:12.515: E/ArrayAdapter(21719): You must supply a resource ID for a TextView
02-27 16:44:12.515: D/AndroidRuntime(21719): Shutting down VM
02-27 16:44:12.515: W/dalvikvm(21719): threadid=1: thread exiting with uncaught exception (group=0x41836ba8)
02-27 16:44:12.525: E/AndroidRuntime(21719): FATAL EXCEPTION: main
02-27 16:44:12.525: E/AndroidRuntime(21719): Process: com.saly.list, PID: 21719
02-27 16:44:12.525: E/AndroidRuntime(21719): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.AbsListView.obtainView(AbsListView.java:2263)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.ListView.makeAndAddView(ListView.java:1790)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.ListView.fillDown(ListView.java:691)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.ListView.fillFromTop(ListView.java:752)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.ListView.layoutChildren(ListView.java:1616)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.AbsListView.onLayout(AbsListView.java:2091)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.View.layout(View.java:14817)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.View.layout(View.java:14817)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.View.layout(View.java:14817)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:374)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.View.layout(View.java:14817)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.View.layout(View.java:14817)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.Choreographer.doCallbacks(Choreographer.java:574)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.Choreographer.doFrame(Choreographer.java:544)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.os.Handler.handleCallback(Handler.java:733)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.os.Handler.dispatchMessage(Handler.java:95)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.os.Looper.loop(Looper.java:136)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.app.ActivityThread.main(ActivityThread.java:5017)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at java.lang.reflect.Method.invokeNative(Native Method)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at java.lang.reflect.Method.invoke(Method.java:515)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-27 16:44:12.525: E/AndroidRuntime(21719):    at dalvik.system.NativeStart.main(Native Method)
02-27 16:44:12.525: E/AndroidRuntime(21719): Caused by: java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextView
02-27 16:44:12.525: E/AndroidRuntime(21719):    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:379)
02-27 16:44:12.525: E/AndroidRuntime(21719):    ... 40 more

最佳答案

移动最终字符串 StInput=ET.getText().toString();在你的 onClick 方法中。

Add.setOnClickListener(new OnClickListener() {          
    public void onClick(View v) {
        String StInput= ET.getText().toString();
        if(StInput != null && StInput.length() > 0){
            ArLi.add(StInput);
            ArAd.notifyDataSetChanged();
            ET.setText("");
        }else{
           //EditText is blank
        }
    }       
}); 

编辑 - 请添加此内容。

ArrayAdapter<String> ArAd=new ArrayAdapter<String>(this,  android.R.layout.simple_list_item_1,android.R.id.text1,ArLi);

我相信您正在使用一个简单的字符串列表。问题在于您的布局,您正在传递它,因为您已经在那里传递了主布局。将其更改为上面的内容并告知是否有效。

关于java - 通过 edittext 将项目添加到 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22068388/

相关文章:

java - 带有自定义适配器的 ListView 不显示所有项目

android - Firebase 身份验证 - 没有来自谷歌登录提供商的电子邮件

java - 如何调用 PaintComponent 方法?

java - 是否可以限制图像大小并仅上传特定大小

java - Maven 和 Eclipse 集成的错误

android - Eclipse 中的 Android 项目缺少 "Add native support"

android - Firebase - 用户身份验证,我的 userRef 不起作用

Android 动态更改菜单项文本颜色

android - 无法实例化接收者没有零参数构造函数

java - 有没有办法通过注释向方法添加特定条件?