java.lang.IllegalStateException: не удалось найти метод num_Clicked (View) в родительском или родительском контексте для android: onClick - PullRequest
0 голосов
/ 29 мая 2018

Я новичок в разработке Android.Я только что создал навигационный ящик с собственным фрагментом (простое приложение калькулятора).В этом фрагменте я добавил метод щелчка для кнопок.Но это не работает.Примечание. Я определил метод onclick в представлении xml

фрагмент калькулятора:

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"/>

Блок навигации:

</p>

<code> ...
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;
    ...
</code>

Я попробовал метод setOnClickListener, он не работает для меня, я ищу вашу помощь.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Вы должны определить num_Clicked() метод in Your Activity not Fragment.

Переместить метод в действие, в котором вы используете этот фрагмент

0 голосов
/ 29 мая 2018

Ваш фрагмент кода неверен.Попробуйте это:

@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.

Попробуйте написать код с этой структурой, ваша проблема исчезнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...