2017-09-11 15 views
0

私はリサイクラビューでステッカーを表示している写真編集アプリケーションを開発しています。 私はnougat.Innougat、parent.getHeight()を返すすべてのアンドロイドOSバージョンで正常に動作するコードで示されているように、ビューの高さと幅を動的に設定しています。高さと幅を静的に設定したくないあなたは(オブジェクトの作成を発射)recyclerviewにデータを追加する場所「は、tは時のonCreateあなたの意見が完成しmeasuramentをdidntのため、あなたはそれを計算しなければならない、私はonCreateViewHolderではありません間違っRecyclerviewのアダプタonCreateViewHolder()メソッドparent.getHeight()return 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

問題をやっているか知っていますonResumeのように遅れている。

+0

にしてみたが、なぜ私の古いコードは他のアンドロイドOS上で動作することを私の混乱をクリアしてください? –

+0

さて、私はいつもこれを見ました。なぜなら、それはなぜいくつかのアンドロイドで動作するのか分かりません。 –

0

作成時にビューが存在しないためです。どうもありがとう...それは働くあなたのonBindViewHolder

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

あなたの素早い応答をありがとうが、それでもゼロを示しています.. @ marcos vasconcelos答えの作品 –

関連する問題