我从一堆教程中将我的第一个应用程序混在一起.在其中一个的帮助下,我在主要活动使用的片段中实现了RecyclerView.现在我找到了另一个教程,我想用它来实现具有上下文动作模式的多选.最大的问题是,教程没有使用片段.我试图重写代码以适应片段.我现在处于Android Studio中并没有出现任何错误且app运行的地方,但是当我实际执行LongClick以选择项时,它会因NullPointerException而崩溃:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.view.ActionMode.setTitle(java.lang.CharSequence)' on a null object reference
我完全迷失了为什么会发生这种情况以及整个多选择的东西.
我认为每个相关课程的相关部分是:
Adapter.java:
public class Adapter extends SelectableAdapter<Adapter.ViewHolder> {
private ArrayList<Meal> items = new ArrayList<>();
private Context context;
private ViewHolder.ClickListener clickListener;
public Adapter(ViewHolder.ClickListener clickListener) {
super();
this.clickListener = clickListener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_today_items, parent, false);
return new ViewHolder(v, clickListener);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
Meal currentMeal = items.get(position);
holder.meal_typeicon.setImageResource(currentMeal.getBadgeIcon()); …Run Code Online (Sandbox Code Playgroud) android android-fragments android-actionmode android-recyclerview
我刚刚从更新的Android支持库com.android.support:appcompat-v7:25.3.1来com.android.support:appcompat-v7:26.0.1.它改变了动作模式图标的外观.现在它们是半可见/按下,如图所示.
它是支持库中的错误还是我做错了什么?
这是我如何设置动作模式的图标.
@Override
public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
menu.add("Delete").setIcon(R.drawable.ic_action_discard);
menu.add("Copy").setIcon(R.drawable.ic_action_copy);
return true;
}
Run Code Online (Sandbox Code Playgroud)
更新
我已经验证这是android支持库中的一个错误.
这是一个链接 https://issuetracker.google.com/issues/64207386
更新
谷歌更新了新版本.从Recent Support Library Revisions页面.
Bug修复
支持库26.0.0上的菜单图标展平
我知道有一些关于样式操作栏的上下文操作栏(ActionMode)部分的问题,但它们似乎并不能解决我所追求的问题.
我正在使用带有浅色主题和黑暗操作栏的工具栏.工具栏看起来像我想要的,但动作模式看起来像常规的黑暗主题.我需要改变自己的风格才能获得黑暗主题动作模式(不仅仅是动作栏)?似乎我应该能够通过点击进入快速,Theme.AppCompat因为这显示了CAB我想要的方式,但我不希望应用程序的其余部分变暗.
我只关心API 14+并使用支持工具栏代替操作栏.
这是我的基本风格
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="android:actionModeBackground">@color/colorActionMode</item>
<item name="android:windowActionModeOverlay">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)
工具栏样式
<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item>
<item name="actionMenuTextColor">@color/abc_primary_text_material_dark</item>
<item name="android:textColorSecondary">@color/abc_primary_text_material_dark</item>
<item name="android:background">@color/colorPrimaryDark</item>
</style>
Run Code Online (Sandbox Code Playgroud)
工具栏布局文件(此处设置popupTheme似乎没有任何效果).
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
app:theme="@style/AppTheme.Toolbar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
android:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
android:elevation="2dp"
android:focusable="false"/>
Run Code Online (Sandbox Code Playgroud)
这是我的工具栏(这就是我想要的)

这是我的ActionMode(我需要反转)

这就是我想要ActionMode的样子(我通过改变我的样式Theme.AppCompat而不是继承而得到的Theme.AppCompat.Light.DarkActionBar.问题是应用程序的其余部分变暗,我不想要.

android android-actionbar android-actionmode android-toolbar
我在嵌套的fragement中实现了一个上下文动作模式栏.此片段是视图分页器的一部分,视图分页器也是片段和导航抽屉的一部分.
我的问题:如果片段不再集中,我想关闭上下文操作模式栏.因此,如果我在视图寻呼机中滑动,则应关闭操作模式栏.但是如果我使用onPause()嵌套片段的方法,则不直接调用该方法.通常它等到我向前滑了两三次......这是一些照片:


在第二张图片中,您可以看到操作模式栏仍然存在.所以我的问题是:我应该在哪种方法中调用我的actionModeBar.finish()方法,如果我离开片段,直接关闭动作模式栏?
也许片段的代码可以帮助你:
public class EditorFragment extends Fragment {
private static final String KEY_POSITION="position";
ListView listView;
private boolean isMultipleList = false;
private ActionMode acMode;
private int counterChecked = 0;
private ActionMode.Callback modeCallBack = new ActionMode.Callback() {
public boolean onPrepareActionMode(ActionMode mode, Menu menu){
return false;
}
public void onDestroyActionMode(ActionMode mode) {
listView.clearChoices();
for (int i = 0; i < listView.getChildCount(); i++)
listView.setItemChecked(i, false);
listView.post(new Runnable() {
@Override
public void run() {
listView.setChoiceMode(ListView.CHOICE_MODE_NONE);
}
});
isMultipleList = …Run Code Online (Sandbox Code Playgroud) android android-viewpager android-contextmenu android-actionmode
我已经实现了一个ActionMode.Callback自定义文本选择功能WebView.我遇到的问题是选择和操作模式状态不匹配.
当我长按时,一切都很好.

当我与其中一个按钮或WebView(不包括实际选择)进行交互时,ActionMode应该销毁它,并且选择应该消失.

在Android 4.4,KitKat中,这正是发生的事情.
然而,这不是4.1.1 - 4.3,Jelly Bean中发生的情况.单击其中一个按钮时,不会删除选择.

当我在选择之外点击时,恰好相反.删除选择,但上下文操作栏仍保留在屏幕上.
Run Code Online (Sandbox Code Playgroud)
android selection webview contextual-action-bar android-actionmode
我正在使用新的Android支持库21.0.2,当我调用ActionMode进行文本选择时,我得到了这个.

看起来比标题textview背景透明.
重新定义ActionMode的titleTextStyle无效.
有什么建议?谢谢.
theme.xml
<item name="actionModeStyle">@style/ActionMode</item>
<item name="android:actionModeStyle">@style/ActionMode</item>
<style name="ActionMode" parent="@style/Widget.AppCompat.ActionMode">
<item name="titleTextStyle">@style/ActionModeTitleTextStyle</item>
</style>
<style name="ActionModeTitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionMode.Title">
<item name="android:background">#ff0000</item>
<item name="android:colorBackground">#ff0000</item>
</style>
Run Code Online (Sandbox Code Playgroud) 我有以下活动布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawerLayout"
style="@style/DrawerLayout"
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.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".ui.activity.MyActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/app_bar_height"
android:background="@color/black"
android:fitsSystemWindows="true"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:collapsedTitleTextAppearance="@style/ToolbarTitle"
app:contentScrim="@color/primary"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_top"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:theme="@style/ThemeOverlay.AppCompat.Light"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<my.package.ui.widget.MyHeaderWidget
android:id="@+id/deal_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="my.package.ui.activity.MyHeaderBehavior"/>
<include layout="@layout/content_list"/>
</android.support.design.widget.CoordinatorLayout>
<include layout="@layout/navigation_view"/>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
它用于具有折叠工具栏+导航抽屉+标题动画和子标题(在标题小部件中).在我尝试启动ActionMode以启用多选之前,一切都很好.
我通过致电来做到:
mActionMode = mCollapsingToolbarLayout.startActionMode(mActionModeCallback);
Run Code Online (Sandbox Code Playgroud)
问题是我结束了两个动作栏(有两个箭头):
黑色的那个是我期待在那里的那个,当我启动ActionMode时添加了白色的那个.
难道我做错了什么?
编辑
在AndroidMaifest中
<activity
android:name=".ui.activity.MyActivity"
android:label="@string/title_activity"
android:theme="@style/MyTheme">
</activity>
Run Code Online (Sandbox Code Playgroud)
在styles.xml中
<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowBackground">@drawable/window_background_gray</item>
<item name="android:colorBackground">@color/app_background</item>
<item name="displayOptions">showHome|homeAsUp|showTitle</item>
<item name="android:icon">@android:color/transparent</item>
<item …Run Code Online (Sandbox Code Playgroud) 只能在动作模式下使用拆分操作栏?
我的应用程序只有顶部操作栏,但它的Contextual Action Bar需要分成两部分(顶部/底部).
我找到了这个:
上下文操作栏不一定与操作栏相关联.它们独立运行,即使上下文操作栏在视觉上超过了操作栏位置.
在http://developer.android.com/guide/topics/ui/menus.html#CAB上.所以我认为这是可能的,但是怎么样?
android android-actionbar contextual-action-bar android-actionmode
我有一个我希望支持的文件格式,它只是一个zip,但我已将其重命名为.amg,所以我的应用程序可以读取它.
在我的三星手机上用姜饼做的很好,它打开了.
在我的带有kitkat的motorola手机上我得到的是无法打开它.
我试过这里找到的各种解决方案,但似乎都没有.
通常,我将文件复制到手机上的下载文件夹中,然后单击该文件.
唯一适用于kitkat的是如果我使用Astro文件管理器打开文件,但我无法强迫该应用程序在人身上.那么是什么让Astro工作却没有别的呢?
<activity
android:name="com.test.StartupActivity"
android:label="@string/app_name"
android:theme="@style/backdropTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:host="*" />
<data android:mimeType="*/*" />
<data android:scheme="file" />
<data android:pathPattern=".*\\.amg" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
** [编辑] ****** 如果我在kitkat中使用Astro文件管理器它似乎工作.所以Astro工作,我试过的其他三个,包括内置的一个,但姜饼总是有效.
但是,当我尝试打开文件时,在我的kitkat上,我得到以下异常:存储的块长度无效.
android android-manifest android-activity android-actionmode
有没有办法更改ActionMode Overflow图标而不更改"普通"ActionBar的图标?