小编AJW*_*AJW的帖子

如何修复getActionBar方法可能会产生java.lang.NullPointerException

我正在使用工具栏作为活动中的操作栏.我正在尝试将该方法添加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 toolbar android-actionbar

73
推荐指数
3
解决办法
6万
查看次数

标题等未在Android工具栏中显示

我刚刚将一个Android工具栏添加到我正在处理的应用中.工具栏放置正确,工具栏布局显示在显示屏顶部.但是,工具栏显示为空白彩色条...应用程序标题和溢出图标不会显示在工具栏中.有关如何修复的任何想法?

ToolbarActivity.java:

public abstract class ToolbarActivity extends ActionBarActivity {

private Toolbar toolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    if (toolbar != null) {
        setSupportActionBar(toolbar);
        getSupportActionBar().setHomeButtonEnabled(true); 
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    toolbar.setTitle("app name");
    }
}
Run Code Online (Sandbox Code Playgroud)

toolbar.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:background="@color/ColorPrimary" >
</android.support.v7.widget.Toolbar>

menu_main.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item android:id="@+id/action_settings"
    android:title="@string/action_settings"
    android:orderInCategory="100"
    app:showAsAction="always" />
</menu>
Run Code Online (Sandbox Code Playgroud)

style.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
      <item name="windowActionBar">false</item>
      <item name="android:windowNoTitle">true</item>
      <item name="colorPrimary">@color/ColorPrimary</item>
      <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
</style>
Run Code Online (Sandbox Code Playgroud)

android toolbar android-toolbar

15
推荐指数
1
解决办法
3万
查看次数

RecyclerView:如何添加OnClick()并保持onLongClick()工作?

我有onClickListener一个CheckBox用于RecyclerView保存CardView列表的设置.在我的ItemHolder扩展中设置了监听器ViewHolder.初始点击CardView检查CheckBox并将CardView的背景颜色从默认的白色切换为红色.这工作正常.

我也有自己的OnClickListener设置CardView.它OnClickListener是在onCreateViewHolder().中设置的.单击将CardView启动新的详细活动CardView.这工作正常.

最后,我尝试onLongClickListener在CardView上设置一个.该OnLongClickListener设置在onCreateViewHolder().CardView上的longpress意味着将背景颜色切换为红色并启动AlertDialog,以便用户可以确认将从列表中删除CardView.这可以正常工作,但是当这个代码添加到适配器时OnClickListerner,CardView的CheckBox不再有效.就好像它OnLongClickListner与CheckBox监听器冲突一样.注意我在itemHolder的onLongClick()代码中"返回true" .我在这里错过了什么?

Adapter.java

public MyRecylerAdapter(Context context, ArrayList<ListItem> listItems, ArrayList<ListItem> selectedList) {
    this.mContext = context;
    this.mListItems = listItems;
    this.selectedItemsList = selectedList;
}

private int selectedPos = -1;
...

private class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    private CardView cardView;
    private CheckBox chkSelected;

    private …
Run Code Online (Sandbox Code Playgroud)

checkbox android android-recyclerview

7
推荐指数
1
解决办法
1714
查看次数

如何删除默认工具栏菜单项并替换为不同的图标?

我正在使用v7.widget.Toolbar支持库和v7.app.ActionBarActivity的工具栏.当onCreateOptionsMenu在工具栏上膨胀时,我看到工具栏最左侧的标准"后退"箭头和工具栏最右侧的标准"溢出"点.

我想隐藏或禁用这些默认图标,并替换为另一组Android推荐图标.有关如何修复的任何想法?

MyActiviy.java:

公共类MyActivity扩展ActionBarActivity {

private Toolbar toolbar;

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

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null) {
            setSupportActionBar(toolbar); 
            getSupportActionBar().setTitle("sc");
            getSupportActionBar().setHomeButtonEnabled(true); 
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return super.onCreateOptionsMenu(menu);
...
Run Code Online (Sandbox Code Playgroud)

android android-actionbaractivity android-toolbar

6
推荐指数
1
解决办法
2万
查看次数

如何在下次通话时在DatePickerDialog中显示先前选择的日期?

首次打开对话框时,DatePickerDialog将被加载到Fragment中,其中以今天的显示为默认日期。然后,用户选择一个日期,然后关闭该对话框。在下一次重新打开时,如何显示以前选择的日期作为默认日期,而不是显示今天的日期?

我曾在Activity中尝试过.set(),但不知道如何使用.get()来检索片段中的日期。我已经尝试过在Activity和片段之间使用侦听器进行接口,但是无法使其正常工作,对于我要实现的简单任务而言,它似乎过于复杂。而且我尝试了从Activity发送到片段的捆绑包,但是我也无法使其正常工作。请指教。

活动文件:

...
final Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, day);
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
Run Code Online (Sandbox Code Playgroud)

片段文件:

...
public static class DatePickerFragment extends DialogFragment
                        implements DatePickerDialog.OnDateSetListener {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current date as the default date in the picker
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);

    return new DatePickerDialog(getActivity(), this, year, month, day);
}

public void onDateSet(DatePicker view, …
Run Code Online (Sandbox Code Playgroud)

android date android-fragments

5
推荐指数
1
解决办法
3999
查看次数

如何处理方向更改以便Fragment不加载?

当EditTextUI中的一行获得焦点时,将DatePickerFragment启动用户输入日期.

在方向更改时,如果EditText线具有焦点和先前输入的日期(这样length() > 0),我不希望片段自动显示.

有没有办法修改或添加代码,以便如果新创建活动并且该EditText行具有焦点,它将不会自动启动 DatePickerFragment?

做某事是不是一个好主意onResume()?

或做的东西savedInstanceState()和!=null?

public class Activity extends AppCompatActivity {
...
EditText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
...
    if (hasFocus && (EditText.getText().length() == 0)) {
       DatePickerFragment newFragment = new DatePickerFragment();
       newFragment.show(getSupportFragmentManager(), "datePicker");
    }
    else if (hasFocus && (EditText.getText().length() > 0)) {
       ...
       DatePickerFragment newFragment = new DatePickerFragment();
       newFragment.show(getSupportFragmentManager(), "datePicker");
    }
 }
});
}
Run Code Online (Sandbox Code Playgroud)

android android-datepicker android-fragments

5
推荐指数
1
解决办法
738
查看次数

如何找到给定Android主题的默认颜色?

我正在使用AppCompat.NoActionBar主题。我想知道如何为EditText行和DialogFragments中的标题找到默认颜色。这些默认值看起来像是深绿色,我也想知道它们是相同还是不同。是否有Android资源按平台版本列出默认颜色?

这是themes.xml:

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

<style name="AppTheme" parent="AppTheme.Base"/>

<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar" >

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimary</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowDisablePreview">true</item>

</style>

    <style name="FloatingLabel" parent="@android:style/TextAppearance" >
    <item name="android:textColor">@color/colorFlLabelActivated</item>
</style>

...
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

表现:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example..." >

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:theme="@style/AppTheme" >

    <activity
        android:name="com.example..."
         >

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name="com.example..."
        android:windowSoftInputMode="stateVisible|adjustResize"
         />
    </activity>

</application>
Run Code Online (Sandbox Code Playgroud)

colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<color name="colorPrimary">#357EC7</color>
<color name="colorHint">#C0C0C0</color>
<color name="colorFlLabelActivated">#357EC7</color>

</resources>
Run Code Online (Sandbox Code Playgroud)

android android-theme android-edittext android-dialogfragment

5
推荐指数
1
解决办法
2275
查看次数

何时使用 RecyclerView setHasFixedSize(true)?

我已经阅读了 Android 开发人员信息以及许多 SO 帖子和 RecyclerView 文章。我仍然不清楚我是否可以使用:

recyclerView.setHasFixedSize(true);
Run Code Online (Sandbox Code Playgroud)

我的 RecyclerView 列表中的方法。随着 CardView 项目随着时间的推移动态添加和删除,我的 RecyclerView 列表的大小将不断变化。但是,每个 CardView 的大小(高度和长度)是固定的。请指教。

android android-cardview android-recyclerview

5
推荐指数
1
解决办法
5488
查看次数

Android:为什么 Checkbox 不显示未选中状态的空复选框?

我在 CardView 布局文件中有复选框代码。CardView 具有白色背景。通常,我认为未选中的 Checkbox 是一个黑色方块。我的布局没有显示空白复选框。我所看到的只是白色的 CardView 背景(屏幕截图中的顶部 CardView)。当我单击设置复选框代码格式的 CardView 最右侧区域时,会出现一个绿色复选框(屏幕截图中的底部 CardView)。我在这里缺少什么? 在此处输入图片说明.

布局文件:

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/background4main"  >

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/singlecard_view1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardBackgroundColor="@android:color/white"
    card_view:cardCornerRadius="6dp"
    android:orientation="horizontal"
    android:layout_margin="4dp">

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?android:selectableItemBackground"  >

    <TextView
        android:id="@+id/cardBlankText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:text="todo"
        android:textStyle="bold"
        android:textColor="@android:color/black"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textSize="20sp"  />

    <TextView
        android:id="@+id/cardBlankText3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/cardBlankText2"
        android:text="note1"
        android:textStyle="bold"
        android:textColor="@android:color/black"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textSize="20sp"  />

    <CheckBox
        android:id="@+id/chkSelected"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"  />

    </RelativeLayout>

</android.support.v7.widget.CardView>

</LinearLayout>

Adapter file:
...
public class ListViewHolder extends RecyclerView.ViewHolder {

    TextView cardBlankText2; …
Run Code Online (Sandbox Code Playgroud)

checkbox android view

4
推荐指数
1
解决办法
5565
查看次数

Android 布局渲染问题

我有一个 RecyclerView 列表,最近布局 Activity_main.xml 中出现了“渲染问题”:

java.lang.NoSuchFieldError: ACTION_SCROLL_IN_DIRECTION at androidx.core.view.accessibility.AccessibilityNodeInfoCompat$Api34Impl.getActionScrollInDirection(AccessibilityNodeInfoCompat.java:5592) [堆栈错误的其余部分如下所示]

一个针对 Android 错误的在线谷歌论坛表明,该问题可能是“implementation 'androidx.core:core:1.12.0'”中的错误,该错误已在下一个 alpha 版本中得到解决。因此,我加载了“implementation 'androidx.core:core:1.13.0-alpha01'”,但这并没有消除问题。

关于这个问题以及如何解决它有什么想法吗?

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>

<androidx.coordinatorlayout.widget.CoordinatorLayout

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:paddingBottom="5dp"
    tools:context=".MainActivity"  >

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <androidx.appcompat.widget.Toolbar

            android:id="@+id/toolbar_main"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >

            <androidx.appcompat.widget.AppCompatImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/action_logo"
                android:title="@string/action_logo"
                android:contentDescription="@string/action_logo"
                android:src="@drawable/ic_toolbar_logo_foreground"
                android:background="#FFFFFF"
                android:gravity="start"
                android:clickable="true"
                android:focusable="true"
                app:showAsAction="always" />

            </androidx.appcompat.widget.Toolbar>

        </com.google.android.material.appbar.AppBarLayout>

    <RelativeLayout

        android:layout_width="match_parent"
        android:layout_height="match_parent"

        app:layout_behavior="com.google.android.material.appbar.
AppBarLayout$ScrollingViewBehavior"
        android:layout_marginStart="6dp"
        android:layout_marginLeft="6dp"
        android:layout_marginTop="5dp"
        android:layout_marginEnd="6dp"
        android:layout_marginRight="6dp"
        tools:context=".MainActivity"
        android:background="@color/colorFlLabelFinal"  >

        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/filterListTV"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_marginStart="14dp" …
Run Code Online (Sandbox Code Playgroud)

android render android-layout

3
推荐指数
1
解决办法
869
查看次数

如何使用TimePicker对话框将默认时间设置为指定的小时?

我有一个片段,它启动一个TimePicker对话框供用户选择一天中的时间.我希望对话框启动时间为下午4:00时显示的默认时间.然后,用户可以选择他们自己的时间.我一直在尝试setHour和setMinute但无济于事.

下面是设置为当前时间的TimePicker的部分代码.请告知如何修改以在TimePicker对话框首次启动时始终显示下午4:00.

...
public Dialog onCreateDialog(Bundle savedInstanceState) {
    cal = Calendar.getInstance();
    hour = cal.get(Calendar.HOUR_OF_DAY);
    minute = cal.get(Calendar.MINUTE);

    TimePickerDialog dialog = new TimePickerDialog(getActivity(),this,hour,minute,
            dialog.setTitle("Select...");

    return dialog;
}
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-timepicker

2
推荐指数
1
解决办法
5572
查看次数

如何更改TextInputLayout的Android浮动标签的默认颜色?

我能够为包装EditText的TextInputLayout更改浮动标签的颜色.当它在动画阶段使用下面的代码浮动时,我可以使用"android:textColor"选择黑色(默认为白色).我试图在EditText变得不聚焦时选择不同的颜色 - 这意味着当浮动标签在EditText上方永久化时.我的最低API是14.请指教.

partial themes.xml文件:

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

<style name="AppTheme" parent="AppTheme.Base"/>

<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar" >
...
</style>

<style name="FloatingLabel" parent="@android:style/TextAppearance" >
    <item name="android:textColor">#000000</item>
</style>
Run Code Online (Sandbox Code Playgroud)

部分layout.xml文件:

...
<android.support.design.widget.TextInputLayout
    android:id="@+id/ToDo_text_input_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:hintTextAppearance="@style/FloatingLabel"
    >
...
Run Code Online (Sandbox Code Playgroud)

android android-theme android-textinputlayout

1
推荐指数
1
解决办法
7462
查看次数

android:使用 Intent.ACTION_BOOT_COMPLETED 还是...?

在 AndroidManifest 文件中,我想在用户重新启动设备时捕获 BOOT_COMPLETED 事件。我正在添加此权限:

“使用权限 android:name="android.permission.RECEIVE_BOOT_COMPLETED”

我在 Stackoverflow 上看到了其他人使用的两个“意图过滤器”:

“Intent.ACTION_BOOT_COMPLETED”和

“android.intent.action.BOOT_COMPLETED”

这里的首选操作字符串是什么?请指教和解释。

android android-manifest bootcompleted

1
推荐指数
1
解决办法
1894
查看次数