自定义视图的onTouchListener不断破坏我的应用程序 我目前正在为Android制作一个音板应用程序,带有自定义的neomorphic按钮。我的应用程序目标是,当我使用onTouchListener单击按钮时,该按钮可以改变样式(看起来像被按下了一样)。但是,每当我尝试添加onTouchListener(在MainAcitvity.java上的initButton()函数中)时,我的应用程序就会崩溃。我附上了我的代码以及我在下面使用的Neomrophic库的链接:
新形态视图库:自定义视图的onTouchListener不断破坏我的应用程序 我目前正在为Android制作一个音板应用程序,带有自定义的neomorphic按钮。我的应用程序目标是,当我使用onTouchListener单击按钮时,该按钮可以改变样式(看起来像被按下了一样)。但是,每当我尝试添加onTouchListener(在MainAcitvity.java上的initButton()函数中)时,我的应用程序就会崩溃。我附上了我的代码以及我在下面使用的Neomrophic库的链接:,java,android,android-studio,android-layout,Java,Android,Android Studio,Android Layout,新形态视图库: MainActivity.java 公共类MainActivity扩展了AppCompatActivity{ private SectionsPageAdapter mSectionsPageAdapter; private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(s
MainActivity.java
公共类MainActivity扩展了AppCompatActivity{
private SectionsPageAdapter mSectionsPageAdapter;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = findViewById(R.id.titleText);
String text = "R6 Soundboard";
SpannableString ss = new SpannableString(text);
ForegroundColorSpan fcsYellow = new ForegroundColorSpan(Color.rgb(255,236,141));
ss.setSpan(fcsYellow, 1,2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ss);
mSectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.view_pager);
setUpViewPager(mViewPager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setTabTextColors(Color.WHITE, Color.WHITE);
tabLayout.setupWithViewPager(mViewPager);
tabLayout.getTabAt(0).setText("Defenders");
tabLayout.getTabAt(1).setText("Attackers");
initButton();
}
private void setUpViewPager(ViewPager viewPager) {
SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
adapter.addFragment(new defendersTab(), "Defenders");
adapter.addFragment(new attackersTab(), "Attackers");
viewPager.setAdapter(adapter);
}
@SuppressLint("ClickableViewAccessibility")
private void initButton(){
final NeumorphCardView DefR1C1 = (NeumorphCardView) findViewById(R.id.buttonDR1C1);
DefR1C1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP) {
DefR1C1.setShapeType(ShapeType.PRESSED);
} else if(event.getAction() == MotionEvent.ACTION_DOWN) {
DefR1C1.setShapeType(ShapeType.FLAT);
}
return false;
}
});
/*
final MediaPlayer mp = MediaPlayer.create(this, R.raw.lionroar);
DefR1C1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
if(mp.isPlaying()) {
//STOP PLAYING
mp.seekTo(0);
}
mp.start();
return false;
}
});
*/
}
}
activity_main.xml
感谢您提供的任何见解!您的错误是您正在MainActivity.java中使用activity\u main.xml。但是,您提供的xml文件名为fragment\u\u tab。您在代码中根本没有引用它 因此,简单的解决方法应该是改变这一点:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
为此:
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_defenders_tab);
您的NeumorpCardView未正确初始化,因此它引发NullPointerException。我猜您没有在activity_main.xml中正确设置表格布局。具体来说,您的android:id=“@+id/tabs”是什么参考?我认为您没有成功地将碎片\u defenders\u选项卡连接到活动\u main。请添加您的崩溃日志?@Sarah我在上面附加了它!谢谢您您的自定义按钮未正确初始化尝试清理和重建项目。@AfshinSamiei您能详细说明一下吗?这并不能解决我的问题。碎片\u deFinders_tab.xml是我的mainactivity.xml表LayoutHMMM上的一个xml。该程序运行良好,之前显示了带有滑动选项卡布局的应用程序。但是,当我试图在mainactivity.java文件中声明NeumorphCardView时,它崩溃了。“@+id/tabs”是我提供给tablayout的id。在我尝试在java中声明NeumorphCardView之前,我附加了一张我的应用程序工作的图片。请将您的代码附加到您使用id=“@+id/tabs”定义tablayout的位置,好吗?当然!我在上面附加了它。我不确定我的TableAyout是否有问题,因为我的TableAyout仍然能够在TableAyout上显示我的按钮,但当我试图使它们可点击时,应用程序崩溃了。
public class SectionsPageAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
public SectionsPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return super.getPageTitle(position);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
}
2020-12-14 10:54:31.781 8217-8217/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.jkcarraher.rainbowsixsoundboard, PID: 8217
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jkcarraher.rainbowsixsoundboard/com.jkcarraher.rainbowsixsoundboard.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void soup.neumorphism.NeumorphCardView.setOnTouchListener(android.view.View$OnTouchListener)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void soup.neumorphism.NeumorphCardView.setOnTouchListener(android.view.View$OnTouchListener)' on a null object reference
at com.jkcarraher.rainbowsixsoundboard.MainActivity.initButton(MainActivity.java:70)
at com.jkcarraher.rainbowsixsoundboard.MainActivity.onCreate(MainActivity.java:54)
at android.app.Activity.performCreate(Activity.java:7995)
at android.app.Activity.performCreate(Activity.java:7979)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_defenders_tab);