方法调用’fab.setOnClickListener(new View.OnClickListener(){@Override public void on …’可能会产生’java.lang.NullPointerException’
我使用min API 15在Android Studio 1.5.1中创建了新的Blank Activity项目
并在生成代码后我有这个警告/错误:
在pasteBin上
MainActivity.java中的代码:
package com.gamecodeschool.myapplication; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; public class MyActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_layout); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.my_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
content_my.xml中的代码:
my_layout.xml中的代码:
请告诉我如何解决这个问题及其发生的原因。 我是Android和Android Studio的新手。 以前我使用的是Apache Cordova。
只需检查/断言fab是否为空:
if (fab != null)
要么:
assert fab != null;
喜欢这个:
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); if (fab != null) fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } });
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show();
在此行中,将onClicklistener
实例作为setAction
方法的第二个参数传递。
Snackbars可以包含通过setAction(CharSequence,android.view.View.OnClickListener)设置的动作。
像这样改变它
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", new View.OnClickListener() { @Override public void onClick(View v) { //whatever you want to do when "Action" is clicked in the SnackBar } }).show();
这个空指针是由Snackbar引起的,不是因为你的浮动按钮。 您需要在set Action方法中创建click侦听器的对象,而不是传递null。