小编Ale*_* D.的帖子

在backstack中添加新片段时,onBackStackChanged()调用两次

所以,我注意到有趣的问题.当我以编程方式添加新片段时,OnBackStackChangedListener中的onBackStackChanged方法被调用两次,但它必须只调用一次.这是我的活动代码:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements FragmentManager.OnBackStackChangedListener{

    private FragmentManager fragmentManager;
    private Button button1;
    private Button button2;
    private Button button3;

    private Fragment defaultFragment;
    private Fragment previousFragment;
    private Fragment currentFragment;
    private String currentFragmentTag;

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

        button1 = (Button) findViewById(R.id.button);
        button2 = (Button) findViewById(R.id.button2);
        button3 = (Button) findViewById(R.id.button3);

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showFragment(new FragmentOne(), FragmentOne.TAG);
            }
        }); …
Run Code Online (Sandbox Code Playgroud)

java android android-fragments android-view fragmentmanager

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

将自己的库从私有存储库发布到 mavenCentral

我为客户创建了一个Android库,它存储在私有存储库中(可以是 Github 或 Bitbucket,没关系)。现在这个库应该发布到mavenCentral以供其他程序员将来使用。还有两个重要的要求:

  1. 库的代码必须位于私有存储库中,其他将使用它的程序员将无法下载存储库。
  2. 库的代码必须被混淆,使用它的程序员将能够使用方法,但无法看到该方法的代码。
  3. 程序员将能够像往常一样通过 gradle 实现库

我怎样才能做到这一点?我找到了很多 mavenCentral 的教程,但它们都只针对公共仓库。

android maven-central

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

Android将html数据加载到chrome自定义标签中

我想在我的应用中使用chrome自定义标签.我发现如何将数据从url加载到选项卡中,但我没有找到,如何使用html-tags从字符串值加载数据.如何从webview示例中进行类比功能:

webViewContent.loadDataWithBaseURL(null, htmlText, "text/html", "UTF-8", null);
Run Code Online (Sandbox Code Playgroud)

在chrome自定义标签中?

html android webview google-chrome-devtools

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

无法使用相同的密钥发送带有参数的改装2.0多部分请求

我需要使用具有图像改造2.0和一些键值参数发送multipart请求:"key1" - "parameter1","key2" - "parameter2"等,但也有使用相同的密钥参数: "somepar[]" - "text1","somepar[]" - "text2"...我不能使用@PartMap这个结构:

@Multipart
@POST(myUrlPart)
Call<ClassEntity> myRequest(@Header("Authorization") String authHeader,
                                @Part("image\"; filename=\"image.png\"") RequestBody image,
                                @PartMap Map<String, RequestBody> params); 
Run Code Online (Sandbox Code Playgroud)

因为Map <>无法使用相同的键存储多个值.而我无法使用

@Part("somepar[]") List<String> mylist  
Run Code Online (Sandbox Code Playgroud)

要么

@Part("somepar[]") String[] myArray  
Run Code Online (Sandbox Code Playgroud)

因为它会发送键值"somepar[]" - "{"1","2","3"}",不"somepar[]" = "1" , "somepar[]" = "2" ,"somepar[]" = "3".

请帮忙,如何提出这样的要求.

android retrofit

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

在AppGlideModule中使用RequestOptions和Glide 4

我使用了diskCacheStrategyAppGlideModule库,库4.1.1的版本.这是我的滑行模块类:

@GlideModule
public class GlideUtil extends AppGlideModule {

    private final int IMAGE_CACHE_SIZE = 20 * 1024 * 1024; // 20 MB
    private final String IMAGE_FOLDER = "/User/Images";

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        RequestOptions requestOptions = new RequestOptions();
        requestOptions.format(DecodeFormat.PREFER_ARGB_8888);
        requestOptions.diskCacheStrategy(DiskCacheStrategy.ALL);
        builder.setDefaultRequestOptions(requestOptions);
        InternalCacheDiskCacheFactory factory = new InternalCacheDiskCacheFactory(context, IMAGE_FOLDER, IMAGE_CACHE_SIZE);
        builder.setDiskCache(factory);

    }

    @Override
    public boolean isManifestParsingEnabled() {
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

此代码成功运行.但是当我将滑动库的版本更新到4.3.1时

compile 'com.github.bumptech.glide:glide:4.3.1' 
annotationProcessor 'com.github.bumptech.glide:compiler:4.3.1'
Run Code Online (Sandbox Code Playgroud)

在GlideUtil类中,我看到了消息:"未使用格式的结果","未使用diskCacheStrategy的结果":

在此输入图像描述

那么,如何解决这个问题呢?那些方法formatdiskCacheStrategy工作是否适用于format4.3.1?

java android image-loading android-glide

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

MediaRouteButton 在 Fragment 中未激活

我使用按钮android.support.v7.app.MediaRouteButton在我的应用程序中使用视频播放器在活动 xml 和片段 xml 中启动 chromecast 。

为了初始化投射按钮,我使用下一个代码:

private void setupChromeCast() {
        try {
            CastButtonFactory.setUpMediaRouteButton(getActivity(), castButton);
            castContext = CastContext.getSharedInstance(getActivity());
            castSession = castContext.getSessionManager().getCurrentCastSession();
            onCastStateChanged(castContext.getCastState());
            castSessionManager = new CastSessionManager(this);
            isChromeCastAvailable = true;
        } catch (Exception e) {
            isChromeCastAvailable = false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

它在活动中运行良好。我的意思是,当 chromecast 设备靠近时,我的 MediaRouteButton 变为活动状态,我可以按下它。但是当这个 Button 在 Fragment 上时,它不会变为活动状态。和回调

   @Override
    public void onCastStateChanged(int state) 
Run Code Online (Sandbox Code Playgroud)

不叫。那么,如何修复这个bug呢?还有一个有趣的时刻:当我在片段中时,按钮不处于活动状态,但是当我将我的应用程序隐藏到后台,然后打开到前台时,我的 mediaroutebutton 变为活动状态。它太奇怪了。

android chromecast

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

在android webview中正确显示iframe

我想在 webView 中显示一些 html 内容。这是我的代码:

String htmlContent = "...";  // some content here       

webViewContent.getSettings().setJavaScriptEnabled(true);
webViewContent.setWebViewClient(new WebViewClient());
webViewContent.setHorizontalScrollBarEnabled(false);
webViewContent.setHorizontalScrollBarEnabled(false);
webViewContent.getSettings().setSupportMultipleWindows(false);
webViewContent.getSettings().setAllowFileAccess(true);
webViewContent.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webViewContent.setWebChromeClient(new WebChromeClient());
webViewContent.setBackgroundColor(ContextCompat.getColor(context, R.color.background_final_page));
webViewContent.loadDataWithBaseURL(null, htmlContent , "text/html", "UTF-8", null);
Run Code Online (Sandbox Code Playgroud)

它可以很好地显示文本和图像,但是当我在 htmlContent 中有 iframe 时,例如

<iframe allowtransparency="true" frameborder="0" scrolling="no" src="https://www.facebook.com/plugins/post.php?href=link" width="100%"></iframe>
Run Code Online (Sandbox Code Playgroud)

webView 显示 iframe 不正确,高度被裁剪。当我将 height="100%" 添加到 iframe 代码时,它没有结果。当我设置 height=600 或 height=400 时,它可以工作,但我无法提前知道 iframe 的高度大小。那么,我该如何修复它呢?

iframe android webview

5
推荐指数
0
解决办法
1694
查看次数

使用telegram bot api创建简单的聊天

我需要在没有自己的服务器的Android应用程序中进行简单的聊天(我的意思是用户 - 用户架构).我可以使用telegram bot api吗?

如果没有,是否有任何免费聊天服务在Android应用程序中进行简单的聊天?

android chat telegram telegram-bot

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