2017-09-11 46 views
0

我正在開發照片編輯應用程序,其中我在回收視圖中顯示貼紙。 我設置充氣視圖的高度和寬度動態如代碼所示它工作正常在所有的Android操作系統版本除了nougat.InNugat,parent.getHeight()返回0.我不想設置高度和寬度靜態,我不喜歡「知道我在做什麼錯Recyclerview的適配器onCreateViewHolder()方法parent.getHeight()返回0

package com.demo.makefunnyface.Adapters; 

import android.content.Context; 
import android.os.Handler; 
import android.support.v7.widget.RecyclerView; 
import android.util.DisplayMetrics; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 

import com.demo.makefunnyface.R; 
import com.demo.makefunnyface.Utils.PojoSticker; 
import com.nostra13.universalimageloader.core.DisplayImageOptions; 
import com.nostra13.universalimageloader.core.ImageLoader; 
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by hp on 9/5/2017. 
*/ 

public class AdapterSticker extends RecyclerView.Adapter<AdapterSticker.MyHolder> { 

    Context context; 
    List<PojoSticker> stickersList = new ArrayList<>(); 
    OnSelectListener onSelectListener; 
    DisplayImageOptions displayImageOptions; 
    ImageLoader imageLoader; 
    ImageLoaderConfiguration imageLoaderConfiguration; 

    public AdapterSticker(Context context, List<PojoSticker> stickersList) { 
     this.context = context; 
     this.stickersList.addAll(stickersList); 

     displayImageOptions = new DisplayImageOptions.Builder().cacheOnDisk(true).cacheInMemory(true).build(); 
     imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(context).defaultDisplayImageOptions(displayImageOptions).build(); 
     imageLoader = ImageLoader.getInstance(); 
     imageLoader.init(imageLoaderConfiguration); 
    } 

    @Override 
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(context).inflate(R.layout.item_sticker_layout, parent, false); 
     RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) view.getLayoutParams(); 
     layoutParams.height = parent.getHeight(); 
     layoutParams.width = parent.getHeight(); 

     //nougat show zero in log 
     Log.e("height", "" + parent.getHeight()); 
     view.setLayoutParams(layoutParams); 
     return new MyHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(MyHolder holder, int position) { 
     imageLoader.displayImage(stickersList.get(position).getPath(), holder.imgSticker); 
    } 

    @Override 
    public int getItemCount() { 
     return stickersList.size(); 
    } 

    class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     ImageView imgSticker; 

     public MyHolder(View itemView) { 
      super(itemView); 
      imgSticker = (ImageView) itemView.findViewById(R.id.imgSticker); 
      imgSticker.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      PojoSticker pojoSticker = stickersList.get(getAdapterPosition()); 
      if (onSelectListener != null) { 
       onSelectListener.onSelected(pojoSticker); 
      } 
     } 
    } 

    public interface OnSelectListener { 
     void onSelected(PojoSticker pojoSticker); 
    } 

    public void setSelectListener(OnSelectListener onSelectListener) { 
     this.onSelectListener = onSelectListener; 
    } 

    public int dpToPx(int dp) { 
     DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); 
     int tmp = (int) ((dp * displayMetrics.density) + 0.5); 
     Log.e("tmp", "" + tmp); 
     return tmp; 
    } 
} 

回答

1

的問題是不是onCreateViewHolder,在這裏你將數據添加到recyclerview(射擊對象的創建),因爲在的onCreate您的意見didnt成品measurament,你必須計算出它延遲,如onResume。

+0

它的工作原理...非常感謝,但請清除我的困惑,爲什麼我的舊代碼在其他Android操作系統上工作? –

+0

那麼,我通常會看到這個行爲,因此不知道它爲什麼在某些機器人中起作用。 –

0

這是因爲在創建您的視圖不存在。試試你的onBindViewHolder

@Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { 
     Log.e("height", "" + holder.itemView.getHeight()); 
     } 
+0

感謝您的快速響應,但它仍然顯示爲零.. @ marcos vasconcelos answer的作品 –