我正在使用运行时权限请求,但是存在问题.似乎onRequestPermissionsResult无限调用回调方法.因此,当用户拒绝该请求时,该应用程序无响应.
每次用户点击"拒绝"时,权限对话框都会重新出现.只有点击"再也不要问",它才会再次出现.*按'允许'时效果很好 - 没有任何问题.
有没有办法取消一次后被调用的方法?
if (ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED )
{
ActivityCompat.requestPermissions( this, new String[]{ Manifest.permission.ACCESS_FINE_LOCATION }, LOCATION_PERMISSION_CUSTOM_REQUEST_CODE );
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch( requestCode )
{
case LOCATION_PERMISSION_CUSTOM_REQUEST_CODE:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted
MyManager.connect();
return;
} else {
// permission denied
return;
}
default:
return;
}
}
Run Code Online (Sandbox Code Playgroud) 两种情况:
1. Session data - For example the logged in User details, or some other session data.
2. Global/stateless data - A repository with retrofit client.
Run Code Online (Sandbox Code Playgroud)
对于情况 1:最简单的方法是使用某种单例 "DataManager/LoginManger" ,但单例很糟糕(测试,随着时间的推移状态不可预测......)另一种方法是使用 Application 类,这也是坏的。
那么我们在哪里存储这些数据呢?
对于案例 2:一个简单的存储库,其中包含对 Retrofit 客户端或其他客户端的引用。
使用它作为单例更有意义,因为这个类是不可变的/无状态的。我们只想创建一次改造客户端。但是.. 测试?
3 . 另外,如果我们想获取 location 怎么办?我们可以在 ViewModel 中使用 LiveData 来负责。但是 ViewModel 的范围是某个视图/活动。所以这意味着如果我们更改视图(例如从抽屉中输入设置,而主页的视图模型正在获取位置),一旦检索到位置数据,我们将丢失位置数据,然后当用户返回主页时,我们不仅要向他们显示位置,还必须重新请求位置。
我还没有找到任何方式来处理所有这些情况。似乎没有明确的答案。
我想使用AbsoluteLayout但不推荐使用它.所以我在上图中的蓝色视图下面创建了一个RelativeLayout,然后将所有内容放在ScrollView中,但隐藏的视图仍然在蓝色视图上,而不是在它下面.此外,屏幕滚动,但隐藏的部分只是剪切,而我看到我的应用程序的默认背景..
有任何想法吗?
编辑:我目前的尝试:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:fillViewport="true"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/imageView" />
<LinearLayout
android:id="@+id/centerHolder"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical" >
.....
.....
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="1000dp"
android:layout_below="@id/main_holder"
android:background="@color/black_color">
</RelativeLayout>
</RelativeLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,在整个布局上显示webview.有时我需要调用异步方法,异步操作由三方sdk完成,然后我等待一段时间直到我得到对指定监听器的响应.我用一个锁存器解决了它 - 一旦在监听器中收到响应,我就计算掉锁存器,然后启动方法可以继续这个响应.不幸的是,当我这样做时,WebView被卡住了.我想象原生UI会被卡住,但我没想到webview也会被冻结.怎么能克服?
为了更清楚,这是一个例子.我需要ajaxFunc等待MyAsyncListener获得某个响应,然后返回这个确切的响应.
JS注入webview的一部分:
var response = jsHandler.ajaxFunc(request.data);
Run Code Online (Sandbox Code Playgroud)
我有一个名为变量的全局变量response.
public class JavaScriptInterface
{
@JavascriptInterface
public String ajaxFunc(String data)
{
return MyUtils.handleData( data );
}
}
Run Code Online (Sandbox Code Playgroud)
handleData方法:
public String handleData( String data )
{
SomeClass.startAsyncRequest(); // starts the async request, response is to come at the listener's callbacks .
latch = new CountDownLatch(1);
try {
latch.await(30, TimeUnit.SECONDS);
}
catch (InterruptedException e) {
e.printStackTrace();
}
return response;
}
Run Code Online (Sandbox Code Playgroud)
现在,一旦handleData函数调用一个异步执行某个函数的函数,异步函数就会在一些Listener中返回一些答案:
myAsyncListener = new MyAsyncListener() {
@Override
public …Run Code Online (Sandbox Code Playgroud) 我在视图寻呼机上有两个片段.我曾经不得不将数据从片段B移动到A并刷新A上显示的数据,我用getItemPosition完成了它.出于某种原因,当我尝试重置所有数据时,相同的方法不起作用..
在我的适配器中我有:
public void refresh()
{
notifyDataSetChanged();
}
@Override
public int getItemPosition( Object obj )
{
return POSITION_NONE;
}
Run Code Online (Sandbox Code Playgroud)
在我点击'重置'的片段中:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
notTriedPasswordsList = PagerActivity.mainList;
.....
....
resetButton.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick( View v )
{
PagerActivity.resetPasswords();
PagerActivity.viewPagerAdapter.refresh();
}});
Run Code Online (Sandbox Code Playgroud)
托管两个片段的viewPager活动:
public static void resetPasswords()
{
mainList.addAll( 0, historyList );
historyList.clear();
PagerActivity.viewPagerAdapter.refresh();
}
Run Code Online (Sandbox Code Playgroud)
显示通道的主要片段:
@Override
public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState )
{
View view = inflater.inflate(R.layout.fragment_main, container, false);
..... …Run Code Online (Sandbox Code Playgroud) 我已经找到了如何绘制三角形,但我现在需要旋转它,但我似乎无法做到。
我的目标是达到这个目标:
到目前为止我已经找到了这段代码:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="40dp"
android:viewportHeight="100"
android:viewportWidth="100">
<group android:name="triableGroup">
<path
android:name="triangle"
android:fillColor="@color/some_color"
android:pathData="m 50,0 l 50,50 -100,0 z" />
</group>
</vector>
Run Code Online (Sandbox Code Playgroud)
但它看起来像这样:
我迁移到Android工作室,在我尝试运行应用程序之前,一切似乎都很好.它卡在Launcher活动中然后崩溃,打印:
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NoSuchMethodError: No direct method <init>(ILjava/lang/String;)V in class Lcom/google/android/gms/common/api/Status; or its super classes (declaration of 'com.google.android.gms.common.api.Status' appears in /data/data/com.MY PACKAGE/files/instant-run/dex/slice-google-play-........b-classes.dex)
at com.google.android.gms.measurement.zza.<init>(Unknown Source)
at com.google.android.gms.measurement.zza.zzaR(Unknown Source)
at com.google.android.gms.measurement.internal.zzn.zziJ(Unknown Source)
at com.google.android.gms.measurement.internal.zzz.zza(Unknown Source)
at com.google.android.gms.measurement.internal.zzw.<init>(Unknown Source)
at com.google.android.gms.measurement.internal.zzaa.zzDj(Unknown Source)
at com.google.android.gms.measurement.internal.zzw.zzaT(Unknown Source)
at com.google.android.gms.measurement.AppMeasurementContentProvider.onCreate(Unknown Source)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1759)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1728)
at android.app.ActivityThread.installProvider(ActivityThread.java:5534)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5105)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5045)
at android.app.ActivityThread.access$1600(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1459)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:168)
at android.app.ActivityThread.main(ActivityThread.java:5845)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个简单的圆形进度条。它工作正常,但我似乎无法使进度圆的角变圆。
我的代码:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape
android:thickness="3dp"
android:shape="ring"
android:type="sweep"
android:useLevel="false">
<solid android:color="@color/light_grey"/>
</shape>
</item>
<item android:id="@android:id/progress">
<rotate
android:fromDegrees="270"
android:toDegrees="270">
<shape
android:thickness="3dp"
android:shape="ring"
android:type="sweep"
android:useLevel="true">
<solid android:color="@color/green"/>
<corners android:radius="8dp"/> // --> this has no effect whatsoever
</shape>
</rotate>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud) 对于没有 Google Play 服务的设备,有几个选项可以接收推送通知。这些选项可以是中国的百度、Pushy、Facebook 自己的推送通知等。
但我不明白如何才能克服这两个主要问题:
我是git的新手.我正在使用bitbucket和sourcetree客户端.我已经从sourcetree中的bitbucket克隆了存储库,然后我想从Master创建一个Develop分支.问题是:没有任何主分支.我已经尝试提交一些文本文件,然后我能够创建那个Develop分支,但我仍然没有在BitBucket中看到master分支,所以我无法从Develop分支创建pull请求来掌握...
我做错了什么?谢谢
我有一个按钮,alpha设置为0.5,其可见性在布局中消失了.
<Button
android:id="@+id/Button"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/black_color"
android:alpha="0.5"
android:visibility="gone"/>
Run Code Online (Sandbox Code Playgroud)
在某些时候,我希望让它可见(Button.setVisibility(View.VISIBLE);),但是当我这样做时 - 它不是半透明的(0.5).看起来好像alpha设置为1.
我正在使用带有 mmvm+livedata+数据绑定的 recyclerview。每次旋转后,我都可以看到旧的物品卡在后面作为背景。
我可以看到适配器具有正确数量的项目,并且实际上适配器仅显示和滚动最新数据。但在后台您可以看到旧列表。
代码非常标准和简单 - 带有数据绑定项的简单的 adatper/recyclervyew。