【问题标题】:I Want to use fragment UI element id in mainactivity java class to accomplish on click listener event on mainactivity class instead of fragment class我想在 mainactivity java 类中使用片段 UI 元素 id 来完成 mainactivity 类而不是片段类上的单击侦听器事件
【发布时间】:2021-07-05 16:13:53
【问题描述】:

这是我的代码 您可以在类中看到我已将 id 声明为 onclick 侦听器,并且每个似乎都没有 0 错误,但是当我运行应用程序时它崩溃并显示“尝试调用虚拟方法 'void android.view.View.setOnClickListener (android.view.View$OnClick" 有什么我必须写下来才能在我的 mainactivity 类中使​​用片段元素之前使用它吗?任何贡献都会有所帮助。

package com.login.mobi.loginapp;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.viewpager2.widget.ViewPager2;

import android.app.DatePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;

import com.google.android.material.tabs.TabLayout;

import java.util.Calendar;

public class MainActivates extends AppCompatActivity {
EditText et1;

    TabLayout tabLayout;
    ViewPager2 pager2;
    FragmentAdapter adapter;
    Calendar calendar=Calendar.getInstance();
    final int year=calendar.get(Calendar.YEAR);
    final int month=calendar.get(Calendar.MONTH);
    final int day=calendar.get(Calendar.DAY_OF_MONTH);


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mains);


EditText txt10=findViewById(R.id.txtnum10);
        tabLayout = findViewById(R.id.tab_layout);
        pager2 = findViewById(R.id.view_pager2);

        FragmentManager fm = getSupportFragmentManager();
        adapter = new FragmentAdapter(fm, getLifecycle());
        pager2.setAdapter(adapter);

        tabLayout.addTab(tabLayout.newTab().setText("Primary info"));
        tabLayout.addTab(tabLayout.newTab().setText("Next"));
        tabLayout.addTab(tabLayout.newTab().setText("Finish-up"));

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                pager2.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
        et1=(EditText) findViewById(R.id.et1);
        et1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DatePickerDialog datePickerDialog=new DatePickerDialog(
                        MainActivates.this, new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int day) {
                        month =month+1;
                        String date=day+"/"+month+"/"+year;
                        et1.setText(date);
                    }
                },year,month,day);
                datePickerDialog.show();
            }
        });

        pager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                tabLayout.selectTab(tabLayout.getTabAt(position));
            }
        });

    }
}
````

【问题讨论】:

    标签: java android android-studio android-fragments


    【解决方案1】:

    你试图在一个空对象上调用setOnClickListener。我猜你的片段还没有膨胀。

    我会在片段中设置 OnClickListener 并从片段中调用活动中的方法:

    if (requireActivity() instanceof MainActivity) {
        ((MainActivity) requireActivity()).magicMethod(); // implement magicMethod in your Activity 
    }
    

    【讨论】:

    • 你能说得清楚一点吗,我的意思是应该在哪里添加代码?
    • 它属于你的fragment中的方法void OnClick(View v)
    猜你喜欢
    • 2019-05-12
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多