我试图得到的高度和宽度ImageView的Fragment有以下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) 我有一个包含多个项目的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) 当我使用它GlobalLayoutListener来查看softKeyboard是否被打开时,片段在被销毁后不再是garbageCollected.
我所做的:
onDestroy()片段中的监听器null在onDestroy()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 android-layout recycler-adapter android-recyclerview
我有一个应用程序,我用RecycleView用CardViews.该CardView含有EditText当我添加一个新的,现在CardView到RecycleView了EditText应该有重点,键盘应该会出现.
我怎样才能做到这一点?我试图在以下内容中添加一些代码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)