2017-01-29 53 views
1

目標是當我點擊gridview中的一個項目時,它應該打開另一個活動,顯示所選項目的詳細信息。但是,傳遞給新活動的值(通過.putExtra)始終是數組列表中的最後一項,無論我點擊哪個項目。這是在適配器類btw中。謝謝:)在適配器onBindViewHolder中的位置始終返回最後一個項目

的代碼可以在下面

@Override 
    public void onBindViewHolder(final listHolder newsHolder, final int position) { 

     currentNews = newsList.get(position); 
     listHolder.ivArt.setImageResource(currentNews.getArt()); 
     newsHolder.ivArt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(viewGroup.getContext(), ViewNewsActivity.class); 
       intent.putExtra("list, (Parcelable) list); 
       viewGroup.getContext().startActivity(intent); 

      } 
     }); 
    } 
+0

讓你'ViewHolder'實現'OnClickListener'並使用「位置」 getter方法的一個內部'onClick'方法 – pskink

+0

爲什麼要傳遞的參數作爲最終?! – Fakher

回答

0

可以看到你得到,因爲在onBindViewHolder方法OnClickListener()一套這樣一個奇怪的行爲。添加setOnClickListener()以查看onCreateViewHolder()內部並創建new View.OnClickListener()內部適配器。

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = inflater.inflate(R.layout.your_layout, parent, false); 
     view.setOnClickListener(onClickListener); 
     ... 
    } 

private View.OnClickListener onClickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int viewPosition = recyclerView.getChildLayoutPosition(v); 
      ... 
     } 
    }; 
0

鴕鳥政策使最終位置上的onBindViewHolder,因爲如果你刪除的任何項目或添加項目的ViewHolder仍會有老位置的參考,而不是考慮使用:holder.getAdapterPosition()

0
  1. 請勿將位置聲明爲final。
  2. currentNews = newsList.get(position); 添加這裏面OnClick方法
相關問題