在GridView中设置EditText会返回NullPointerException吗?

时间:2013-12-24 05:33:03

标签: java android gridview null android-edittext

大家好,祝大家节日快乐。

这是我遇到的问题: 我在这里使用mrKlar的PagedDragDrop设置了一个GridView:https://github.com/mrKlar/PagedDragDropGrid

我正在努力使其不是在每个项目下面预先确定的文本,而是用户可以选择在其下面输入文本。要做到这一点,我最初的想法是编辑Item.java文件,使其输出EditText而不是字符串。所以这就是我最终的结果(您可以将它与上面github链接中的原始Item.java文件进行比较):

package com.example.startingeleven;

import android.widget.EditText;

public class Item {

    private long id;
    private EditText name;
    private int drawable;

    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name.getText().toString();
    }
    public void setName(EditText name) {
        this.name = name;
    }
    public int getDrawable() {
        return drawable;
    }
    public void setDrawable(int drawable) {
        this.drawable = drawable;
    }
    public Item(long id, EditText name, int drawable) {
        super();
        this.id = id;
        this.name = name;
        this.drawable = drawable;
    }
}

这是我认为与此相关的主ExamplePagedDragDropGridAdapter文件中的代码区域

public class ExamplePagedDragDropGridAdapter extends Activity implements PagedDragDropGridAdapter {

    private Context context;
    private PagedDragDropGrid gridview;

    List<Page> pages = new ArrayList<Page>();

    public ExamplePagedDragDropGridAdapter(Context context, PagedDragDropGrid gridview) {
        super();
        this.context = context;
        this.gridview = gridview;
        EditText striker1 = (EditText)findViewById(R.id.striker1);

        Page page1 = new Page();
        List<Item> items = new ArrayList<Item>();
        items.add(new Item(1, striker1, R.drawable.jersey));
        page1.setItems(items);
        pages.add(page1);
    }

这是显示错误的LogCat:

12-23 23:55:10.315: E/AndroidRuntime(1622): FATAL EXCEPTION: main
12-23 23:55:10.315: E/AndroidRuntime(1622): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.startingeleven/com.example.startingeleven.FieldActivity}: java.lang.NullPointerException
12-23 23:55:10.315: E/AndroidRuntime(1622):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at android.os.Looper.loop(Looper.java:137)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at android.app.ActivityThread.main(ActivityThread.java:5103)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at java.lang.reflect.Method.invokeNative(Native Method)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at java.lang.reflect.Method.invoke(Method.java:525)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at dalvik.system.NativeStart.main(Native Method)
12-23 23:55:10.315: E/AndroidRuntime(1622): Caused by: java.lang.NullPointerException
12-23 23:55:10.315: E/AndroidRuntime(1622):     at android.app.Activity.findViewById(Activity.java:1853)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at com.example.startingeleven.ExamplePagedDragDropGridAdapter.<init>(ExamplePagedDragDropGridAdapter.java:63)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at com.example.startingeleven.FieldActivity.onCreate(FieldActivity.java:29)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at android.app.Activity.performCreate(Activity.java:5133)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-23 23:55:10.315: E/AndroidRuntime(1622):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
12-23 23:55:10.315: E/AndroidRuntime(1622):     ... 11 more
12-23 23:55:46.794: I/Process(1622): Sending signal. PID: 1622 SIG: 9

我是否在正确的轨道上编辑项目文件以使EditText显示在项目下方?我有一种感觉,这可能是很多要求解决方案,但然后再次我不是Android编程中最知识的大声笑。无论哪种方式,对此问题的任何修复都非常感谢,请询问您是否需要更多信息。

感谢。

2 个答案:

答案 0 :(得分:0)

 EditText striker1 = (EditText)findViewById(R.id.striker1);

您没有给布局充气。 findViewById在当前的infalted布局中查找id为id的视图。由于您没有夸大布局并尝试初始化edittext,因此您获得了NullPointerException

答案 1 :(得分:0)

您只需要首先夸大您定义编辑文本的布局,即striker1,然后从该布局调用findviewbyid,您将获得edittext实例..!

这是你真正需要做的: -

 View layout = inflater.inflate(R.layout.your_xml_layout,
                        null);
 EditText striker1 = (EditText)layout.findViewById(R.id.striker1);

注意

这里R.layout.your_xml_layout:是你用你的id定义你的edittext的布局文件,即striker1。

试试吧..!