相关疑难解决方法(0)

片段 - removeGlobalOnLayoutListener IllegalStateException

我试图得到的高度和宽度ImageViewFragment有以下ViewTreeObserver:

import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;

private ImageView imageViewPicture;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_general_activity_add_recipe, container, false);
    setHasOptionsMenu(true);

    ...

    final ViewTreeObserver observer = imageViewPicture.getViewTreeObserver();
    observer.addOnGlobalLayoutListener (new OnGlobalLayoutListener () {
        @Override public void onGlobalLayout() {
            observer.removeGlobalOnLayoutListener(this);
        }
    });

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

运行此代码会导致以下异常:

10-12 23:45:26.145: E/AndroidRuntime(12592): FATAL EXCEPTION: main
10-12 23:45:26.145: E/AndroidRuntime(12592): java.lang.IllegalStateException: This ViewTreeObserver is not alive, call getViewTreeObserver() again
10-12 23:45:26.145: E/AndroidRuntime(12592):     at android.view.ViewTreeObserver.checkIsAlive(ViewTreeObserver.java:509)
10-12 23:45:26.145: E/AndroidRuntime(12592): …
Run Code Online (Sandbox Code Playgroud)

android android-view

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

使用多种视图类型在recyclerview中滚动到底部

我有一个包含多个项目的recyclerview.和recyclerview有不同的视图类型和不同的高度..

所以这些是我尝试过的

recyclerview.scrollToPosition(adapterWrapper.getAdapter().getItemCount()-1);
Run Code Online (Sandbox Code Playgroud)

app:layoutManager="LinearLayoutManager"
app:stackFromEnd="true"
Run Code Online (Sandbox Code Playgroud)

当我将它们应用于单一视图类型时,它们对我很有用.但是在多视图类型中.它不是滚动到底部.它被困在底部之前的9个项目中.

我以前stackFromBottom在listview 中使用它工作正常..

那么在recyclerview中它的解决方案是什么?

它实际上是一个聊天应用程序,具有不同类型的布局,包括图像,GIF等.

RecyclerAdapter代码,

package com.buckydroid.anonchat.Adapters;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.URLUtil;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.Toast;

import com.buckydroid.anonchat.Async.DownloadManager;
import com.buckydroid.anonchat.Chatroom.ChatRoom;
import com.buckydroid.anonchat.Pages.FullScreenImageView;
import com.buckydroid.anonchat.Pages.Profile;
import com.buckydroid.anonchat.Pages.VideoPlayer;
import com.buckydroid.anonchat.R;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.load.resource.gif.GifDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.GlideDrawableImageViewTarget;
import com.bumptech.glide.request.target.Target;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener; …
Run Code Online (Sandbox Code Playgroud)

java android admob recycler-adapter android-recyclerview

14
推荐指数
2
解决办法
982
查看次数

view.getViewTreeObserver().addOnGlobalLayoutListener泄漏片段

当我使用它GlobalLayoutListener来查看softKeyboard是否被打开时,片段在被销毁后不再是garbageCollected.

我所做的:

  • 我删除了onDestroy()片段中的监听器
  • 我的监听器设置为nullonDestroy()
  • 我将观察到的视图设置为null onDestroy()

仍在泄漏碎片.

有没有人有类似的问题,并知道它的修复?

我的onDestroy:

   @Override
public void onDestroy(){
    Log.d(TAG , "onDestroy");

    if(Build.VERSION.SDK_INT < 16){
        view.getViewTreeObserver().removeGlobalOnLayoutListener(gLayoutListener);
    }else{
        view.getViewTreeObserver().removeOnGlobalLayoutListener(gLayoutListener);
    }

    view = null;
    gLayoutListener = null;



    super.onDestroy();
    }
Run Code Online (Sandbox Code Playgroud)

android memory-leaks android-fragments

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

11
推荐指数
2
解决办法
3万
查看次数

从RecycleView中添加项目重点关注EditText

我有一个应用程序,我用RecycleViewCardViews.该CardView含有EditText当我添加一个新的,现在CardViewRecycleViewEditText应该有重点,键盘应该会出现.

我怎样才能做到这一点?我试图在以下内容中添加一些代码onBindViewHolder:

public void onBindViewHolder(TodoViewHolder holder, final int position) {
    ...
    if(holder.tvDescription.requestFocus()) {
        window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者虽然创造ViewHolder但它没有奏效.

public class TodoViewHolder extends RecyclerView.ViewHolder {
    protected CheckBox cbDone;
    protected EditText tvDescription;
    protected FloatingActionButton btnDelete;

    public TodoViewHolder(View itemView) {
        super(itemView);

        cbDone = (CheckBox)itemView.findViewById(R.id.cbDone);
        tvDescription = (EditText) itemView.findViewById(R.id.tvDescription);
        btnDelete = (FloatingActionButton) itemView.findViewById(R.id.btnDelete);

        if(tvDescription.requestFocus()) {
            window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我AdapterCode的解决方案:

public abstract class ArrayAdapter<T, …
Run Code Online (Sandbox Code Playgroud)

android focus android-edittext android-recyclerview

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