2016-01-11 3 views
3

я столкнулся с этой проблемойStaggeredGridView изменение размеров записи на свитке

Am используя ступенчатый вид сетки и имеет комбинацию из двух колонок и одного columns..Something как этого

enter image description here

все работает нормально, пока я не прокручиваю вверх и вниз несколько раз, и это случайным образом изменяется примерно на это

enter image description here

еще несколько свитков, и это в конечном итоге, как этот

enter image description here Я понятия не имею, почему и его очень случайно. Я пытался сделать notifyDataSetChanged каждый раз, когда страница отображается, и does'nt, кажется, сделать что-нибудь

Это код для моей приборной панели

public class DashboardStaggered extends Fragment { 
    RecyclerView mRecyclerView; 
    View v; 
    MasonryAdapter adapter; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     Log.d("MASONRY", "onCreateView"); 
     super.onCreate(savedInstanceState); 
     if(v==null) { 
      Log.d("MASONRY", "v is NULL recreating"); 
      v = inflater.inflate(R.layout.activity_dashboard_staggered, container, false); 
      setupRecyclerView(); 
     }else{ 
      Log.d("MASONRY", "v is NOT NULL"); 

     } 

     return v; 
    } 

    private void setupRecyclerView(){ 
     mRecyclerView = (RecyclerView) v.findViewById(R.id.masonry_grid); 
     mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)); 
     adapter = new MasonryAdapter(getActivity(),this); 
     mRecyclerView.setAdapter(adapter); 
     SpacesItemDecoration decoration = new SpacesItemDecoration(12); 
     mRecyclerView.addItemDecoration(decoration); 
     adapter.notifyDataSetChanged(); 

    } 
    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     Log.d("MASONRY", "onResume"); 
     if(mRecyclerView==null) { 
      setupRecyclerView(); 
     } 



    } 
    @Override 
    public void onPause() { 
     super.onPause(); 
     Log.d("MASONRY", "onPause"); 

    } 

} 

В случае необходимости я мог отправить адаптер тоже. Любые предложения высоко оценены людьми.

код

адаптера здесь (не хочу, чтобы сделать пост грязного) http://pastebin.com/QkZbjjp1

подстриженного код http://pastebin.com/Hgsji1RG

+0

Выразить адаптер код пожалуйста. Если вы делаете какие-либо фоновые операции, которые могут быть виновниками. –

+0

Добавлено в сообщение Джейсон, пожалуйста, посмотрите – Veeru

+0

Извините, мне слишком тяжело разбирать, что там происходит. –

ответ

0

Как джейсон упоминался в комментариях, это была ошибка в itemgetviewtype, логическая ошибка больше, чем что-либо еще , Но извлеченный урок, обновленный код для getItemViewType:

@Override 
    public int getItemViewType(int position) { 
     // Return type based on position 
     return tileDefinitions.get(position).getTileType(); 
    } 

Спасибо всем за указание на это.

0

Это происходит потому, что доза владельца не распознает ширину и высоту изображения при прокрутке вверх и вниз. Он очищает верхний вид при прокрутке вниз и наоборот.

Использование так:

@Override 
public void onBindViewHolder(ViewHolder viewHolder, int position) { 

    MyViewHolder vh = (MyViewHolder) viewHolder; 
    ImageModel item = imageModels.get(position); 
    RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) vh.imageView.getLayoutParams(); 
    float ratio = item.getHeight()/item.getWidth(); 
    rlp.height = (int) (rlp.width * ratio); 
    vh.imageView.setLayoutParams(rlp); 
    vh.positionTextView.setText("pos: " + position); 
    vh.imageView.setRatio(item.getRatio()); 
    Picasso.with(mContext).load(item.getUrl()).placeholder(PlaceHolderDrawableHelper.getBackgroundDrawable(position)).into(vh.imageView); 
} 

Для ясно видеть эту ссылку: Picasso/Glide-RecyclerView-StaggeredGridLayoutManager

Смежные вопросы