我正在尝试创建一个编辑文本字段,我输入一个字符串然后按下它旁边的按钮,这个字符串被添加到片段的列表视图中。 当我编译代码时,我得到以下错误:
10-19 15:04:14.620 21147-21147/com.example.gasper.test E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.gasper.test.TopRatedFragment.onCreateView(TopRatedFragment.java:57)
这是第57行
b.setOnClickListener(listener);
现在有人在这里有什么问题吗?我是android开发的初学者,所以不要判断我:)。
我也试过这样的事,但仍然没有工作:
if(listener !=null){
b.setOnClickListener(listener);}
package com.example.gasper.test;
以下是完整代码:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import static com.example.gasper.test.R.layout.fragment_top_rated;
public class TopRatedFragment extends Fragment {
String[] myString =new String[] {"0ne","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve"};
List list = new ArrayList<String>();
ArrayAdapter<String> adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(fragment_top_rated, container, false);
for(String activity : myString){
list.add(activity);
}
adapter = new ArrayAdapter<String>(this.getActivity(), fragment_top_rated,R.id.textView,list);
ListView listView = (ListView) rootView.findViewById(R.id.listView);
Button b = (Button) getActivity().findViewById(R.id.button);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText edit = (EditText) getActivity().findViewById(R.id.editText);
list.add(edit.getText().toString());
edit.setText("");
adapter.notifyDataSetChanged();
}
};
getActivity().setContentView(R.layout.fragment_top_rated);
b.setOnClickListener(listener);
listView.setAdapter(adapter);
return rootView;
}
}
这是fragment_top:rated.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ffefe4fa" >
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="false"
android:layout_alignParentRight="false"
android:layout_below="@+id/editText" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText1"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:hint="@string/edit_message"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add"
android:id="@+id/button1"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:onClick=""/>
</RelativeLayout>
答案 0 :(得分:0)
您似乎错误输入了ID:
Button b = (Button) getActivity().findViewById(R.id.button);
您的布局有button1
而不是button
。
编辑:
此外,按钮位于您的片段布局中,而不是您的活动中,因此请按照以下方式查找:
Button b = (Button) rootView.findViewById(R.id.button1);
答案 1 :(得分:0)
ArrayAdapter
有一个内部List
。传递给构造函数的字符串list
仅复制到内部列表以初始化适配器。
用户适配器对象的add()
或addAll()
实际将项目添加到ArrayAdapter
。
更改
list.add(edit.getText().toString());
到
adapter.add(edit.getText().toString());
更新1:
Button b = (Button) getActivity().findViewById(R.id.button);
您正在使用片段,但尚未附加到活动中,因此活动无法从未附加到其中的视图中找到任何内容:
Button b = (Button) rootView.findViewById(R.id.button);
答案 2 :(得分:0)
替换代码的这一行
Button b = (Button) getActivity().findViewById(R.id.button);
用这一行并试一试
Button b = (Button) rootView.findViewById(R.id.button1);
编辑1:
adapter = new ArrayAdapter<String>(this.getActivity(), fragment_top_rated,R.id.textView,list);
这行代码显示你正在使用相同的xml ...是否在你的xml中定义了任何textView ..只需为你的列表视图创建一个新的xml ..并在这里使用..