我正在使用工具栏作为活动中的操作栏.我正在尝试将该方法添加getActionBar().setDisplayHomeAsUpEnabled(true);到Activity.java文件中以用于较旧设备的向上导航.
该方法在Android Studio中生成以下错误消息:
方法调用可能会产生java.lang.NullPointerException
工具栏上的向上导航在较新的设备上运行良好...现在我正在试图弄清楚如何确保它适用于旧设备.请指教.
来自build.gradle:
dependencies {
compile "com.android.support:appcompat-v7:22.1.0"
}
Run Code Online (Sandbox Code Playgroud)
来自AndroidManifest.xml:
android:theme="@style/Theme.AppCompat.NoActionBar.FullScreen"
Run Code Online (Sandbox Code Playgroud)
来自styles.xml
<style name="Theme.AppCompat.NoActionBar.FullScreen" parent="AppTheme">
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
Run Code Online (Sandbox Code Playgroud)
来自Activity.java
public class CardViewActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cardviewinput);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
// Up navigation to the parent activity for 4.0 and earlier
getActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationIcon(R.drawable.ic_action_previous_item);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
}
Run Code Online (Sandbox Code Playgroud) 我能找到的最接近的问题是Android Studio 3.0 lint警告,用于引用活动,但它没有帮助.
使用AndroidStudio 3.0.1,我有一个DialogFragment常用的东西:
@Override
@NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
...
Run Code Online (Sandbox Code Playgroud)
我有一条皮带警告呻吟着我Argument 'getActivity()' might be null.
我理解为什么 getActivity()可能为null,我理解lint检查如何知道这一点(来自@Nullable注释).
我的问题是:这一切都非常好,getActivity()可能是空的,但实际上我应该如何优雅和整洁地处理这个问题呢?onCreateDialog 必须返回一个Dialog(因为超类' @Nullable注释)所以我必须有Activity上下文来创建它.
我可以假设,onCreateDialog如果DialogFragment没有附加到活动,将永远不会被调用,但仍然 - 我如何解决不整洁的lint警告?