【问题标题】:java.lang.IllegalStateException: Could not find method num_Clicked(View) in a parent or ancestor Context for android:onClickjava.lang.IllegalStateException:在 android:onClick 的父或祖先上下文中找不到方法 num_Clicked(View)
【发布时间】:2018-05-29 08:09:23
【问题描述】:

我是 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 方法,它对我不起作用 我正在寻求你的帮助。提前致谢。

【问题讨论】:

  • 你说的不工作到底是什么意思,给出错误或不符合预期
  • 同时提供您的错误代码。

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


【解决方案1】:

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

@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

试着用这种结构写代码,你的问题就解决了。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多