java.lang.IllegalStateException:无法在父级或祖先语句中找到方法num_Clicked(View)for android:onClick

时间:2018-05-29 08:09:24

标签: android android-fragments onclick android-xml android-navigation-drawer

我是Android开发的新手。我刚刚用自己的片段(简单的计算器应用程序)创建了导航抽屉。在那个片段中,我为按钮添加了一个click方法。但这不起作用。 注意:我在xml视图中定义了onclick方法

计算器片段:

public class SimpleCalcActivity extends Fragment {

    private TextView mDisplay;

    private boolean mDisplayIsEmpty = true;
    private boolean mFirstNumberReceived;
    private boolean mNumberEntered;
    private boolean mPointEntered;
    private double sNum1;
    private double sNum2;
    private static OperationsAndFunctions.OperEnum sOperation;
    private static OperationsAndFunctions.FuncEnum sFunction;
    private Animation anim;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable  ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.activity_simplecalc,null);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mDisplay = (TextView) view.findViewById(R.id.resultview);
        mDisplay.setText("0");
    }

    public void num_Clicked(View view) {
        Button button = (Button) view;
        int number = 0;

        switch (button.getId()) {

            case R.id.n_one:
                number = 1;
                anim = AnimationUtils.loadAnimation(getContext(), 
R.anim.btn_anim);
                button.startAnimation(anim);
                break;
            case R.id.n_two:
                number = 2;
                anim = AnimationUtils.loadAnimation(getContext(), 
R.anim.btn_anim);
                button.startAnimation(anim);
                break;
           ...
    }
...
}

计算器视图:

<Button
    android:id="@+id/o_root"
    android:layout_width="70dp"
    android:layout_height="wrap_content"
    android:background="@drawable/button"
    android:text="@string/root"
    android:onClick="func_Clicked"
    android:textStyle="bold"
    android:textSize="30sp"
    android:layout_marginRight="5dp"
    android:layout_marginLeft="5dp"
    android:textColor="@android:color/white"/>
<Button
    android:tag="nums"
    android:id="@+id/n_seven"
    android:layout_width="70dp"
    android:layout_height="wrap_content"
    android:background="@drawable/button"
    android:text="@string/_7"
    android:onClick="num_Clicked"
    android:textStyle="bold"
    android:textSize="30sp"
    android:layout_marginRight="5dp"
    android:layout_marginLeft="5dp"
    android:textColor="@android:color/white"/>

导航抽屉:

... public boolean onNavigationItemSelected(MenuItem item) { Fragment fragment = null; // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_simple_calc) { fragment = new SimpleCalcActivity(); } } if (fragment != null){ FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.screen_area, fragment); ft.commit(); } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; ...

我尝试过setOnClickListener方法,它对我不起作用 我正在寻找你的帮助。提前谢谢。

2 个答案:

答案 0 :(得分:0)

您的片段代码错误。试试这个:

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

    cancelAction = view.findViewById(R.id.cancelActionId);

    cancelAction.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //do anything.
        }
    });

    return view;
}

您不会退回view

尝试用这种结构编写代码,你的问题就会消失。

答案 1 :(得分:0)

您应该定义num_Clicked()方法 in Your Activity not Fragment

将方法移动到您正在使用该片段的活动