Android的 - 无法找到方法onButtonClick(查看) [英] Android - Could not find method onButtonClick(View)

查看:326
本文介绍了Android的 - 无法找到方法onButtonClick(查看)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个按钮,ID为btn_scansiona问题一旦我点击它下面的回溯被触发:

I have a problem with the button id "btn_scansiona" once I click on it the following traceback is trigged:

java.lang.IllegalStateException: Could not find method onButtonClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'btn_scansiona'
                                                                           at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:325)
                                                                           at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
                                                                           at android.view.View.performClick(View.java:4780)
                                                                           at android.view.View$PerformClick.run(View.java:19866)
                                                                           at android.os.Handler.handleCallback(Handler.java:739)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:135)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                                           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:903)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

fragment_scan.xml

fragment_scan.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.test.myapp.ScanFragment">


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="keywords"
    android:id="@+id/textView3"
    android:layout_gravity="center_horizontal|top"
    android:textStyle="bold"
    android:layout_marginTop="40dp"
    android:textSize="20dp" />

<Button
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:text="scansiona"
    android:id="@+id/btn_scansiona"
    android:layout_gravity="center_horizontal|bottom"
    android:textStyle="bold"
    android:layout_marginBottom="40dp"
    android:background="#ffaa00"
    android:onClick="onButtonClick" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Insert keywords"
    android:id="@+id/textSearch"
    android:layout_marginTop="80dp"
    android:layout_gravity="center_horizontal|top"
    android:enabled="true"
    android:inputType="text"
    android:textColor="@color/abc_input_method_navigation_guard"
    android:textIsSelectable="false"
    android:textSize="20sp"
    android:textStyle="bold"
    android:selectAllOnFocus="false" />

ScanFragment.java

ScanFragment.java

public class ScanFragment extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";

// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;

private OnFragmentInteractionListener mListener;

public ScanFragment() {
    // Required empty public constructor
}

/**
 * Use this factory method to create a new instance of
 * this fragment using the provided parameters.
 *
 * @param param1 Parameter 1.
 * @param param2 Parameter 2.
 * @return A new instance of fragment ScanFragment.
 */
// TODO: Rename and change types and number of parameters
public static ScanFragment newInstance(String param1, String param2) {
    ScanFragment fragment = new ScanFragment();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }

}



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_scan, container, false);
}

// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        mListener.onFragmentInteraction(uri);
    }
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try {
        mListener = (OnFragmentInteractionListener) context;
    } catch (ClassCastException e) {
        throw new ClassCastException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

//DB
private DbManager db=null;
private CursorAdapter adapter;
String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

public void onButtonClick(View view){
    //do something when button is clicked.
    EditText txt=(EditText) view.findViewById(R.id.textSearch);
    if (txt.length()>0 && date.length()>0)
    {
        db.save(txt.getEditableText().toString(), date);
        adapter.changeCursor(db.query());
    }
}

}

如果我宣布了以下追踪消失的方法上MainActivity.javaonButtonClick,但我收到关于txt.length另一个回溯不能为空。
哪里是我的错?谢谢
丹尼尔

If I declare the method "onButtonClick" on MainActivity.java the following traceback disappear but I receive another traceback regarding the "txt.length" cannot be null. Where is my mistake? thanks Daniele

推荐答案

首先,在的onClick 方法应该是在父活动present,所以这是为什么错误没有的情况下,未来您将code将活动类

First of all, the onClick method should be present in the parent activity, so that's why the error ain't coming in case you move the code to the activity class

如果你想拥有它在你的片段,那么你就必须初始化片段中的按钮,并设置 onClickListener 吧,是这样的:

If you want to have it in your fragment then you'll have to initialize the button in fragment and set the onClickListener for it, something like this :

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

   View view = inflater.inflate(R.layout. fragment_scan,
    container, false);
   Button button = (Button) view.findViewById(R.id.btn_scansiona);
   button.setOnClickListener(new OnClickListener()
   {
             @Override
             public void onClick(View v)
             {
                // do something
             } 
   }); 
   return view;
}

和你得到 txt.length()不能为空错误的原因:

and you're getting txt.length() can't be null error because :


  • 您已经定义 TXT 作为你的的EditText ,这不是它里面的文本。你必须获取文本,并将其转换为字符串是这样的:

    • txt.getText()。的toString()

    • You've defined txt as your EditText and it's not the text inside it. You'll have to fetch the text and convert it to String like this :
      • txt.getText().toString()

      那么你可以做你的正常的处理是这样的:

      then you can do your normal processing like this :

      txt.getText().toString().length()
      

      这篇关于Android的 - 无法找到方法onButtonClick(查看)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆