java - fragment 中的Onclick按钮方法

标签 java android

我在android中创建了简单的应用程序。我在抽屉导航中有一个用户个人资料。当在该抽屉中选择地址选项时,打开该 fragment (示例:地址 fragment )。在该布局中我放置了保存按钮。单击该保存按钮时,我想验证所有字段。但是,当我从抽屉中选择该选项时,应用程序不幸停止了。

我的代码在这里:

AddressFragment.java

import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class AddressFragment extends Fragment {
    EditText line2;
    Button addrsave;
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
							 Bundle savedInstanceState) {

		View view = inflater.inflate(R.layout.fragment_layout_address, container, false);

        addrsave = (Button) getActivity().findViewById(R.id.addrsave);

        // Get a reference to the AutoCompleteTextView in the layout
		AutoCompleteTextView textView = (AutoCompleteTextView) view.findViewById(R.id.city_autoCompleteTextView);
		// Get the string array
		String[] city = getResources().getStringArray(R.array.city);
		// Create the adapter and set it to the AutoCompleteTextView
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, city);

		textView.setAdapter(adapter);
        addrsave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String addr = line2.getText().toString();
                if (addr.equals("")) {
                    Toast.makeText(getActivity().getApplicationContext(), "Field cannot be left blank.", Toast.LENGTH_SHORT).show();
                }
            }
        });

	return view;

  }


}

我的日志猫:

07-22 12:47:46.235    6355-6355/com.h2o E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.h2o, PID: 6355
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.h2o/com.h2o.AccountActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
            at com.h2o.AddressFragment.onCreateView(AddressFragment.java:38)
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
            at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
            at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220)
            at android.app.Activity.performStart(Activity.java:5953)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

请大家帮忙!!

提前致谢!!!

最佳答案

更改此:

addrsave = (Button) getActivity().findViewById(R.id.addrsave);

对此:

addrsave = (Button) view.findViewById(R.id.addrsave);

问题是您正在 getActivity() 上执行 findViewById() ,这会给您一个 null 。然后在其上设置一个 onClickListener 将抛出 NullPointerException。

希望对您有帮助! :)

关于java - fragment 中的Onclick按钮方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31556692/

相关文章:

java - 检查单词是否属于语言环境

java - 使用 JNI 在 Java 和 C 之间进行高效的数据共享

java - 最佳实践 : best database naming convention for JPA?

java - Android和java字节码操作

android - 包重命名后 BackupAgent 失败

java - 在 Android 对话框中使用列表 - 如何避免静态?

java - ArrayList 的并发修改异常

java - 动画监听器不响应 Animatorset

android - float 操作按钮动画问题

android - getSupportActionBar 标题颜色