2016-09-05 19 views
0

望ましい結果RecyclerViewは:onClickのカスタム行

スクロール位置を維持し、カスタム列の特定のビューに正しい位置を与えるの特定のビューの間違った位置を与えます。

私はRecandlerViewを使用して、リストの先頭とリストの最後にオンデマンドデータを追加しようとしています。

スクロールボトムによるデータの取得は完全に機能しています。

しかし、次のようにトップ問題を持つスクロール:アダプタのonBindViewHolderに

  1. 設定をクリックリスナーを。
  2. RecyclerviewのOnItemTouchListenerでクリックリスナーを設定します。ここで

はケースです:

私は、リストをスクロールアップして、それは15件のデータをロードし、リストの一番上に追加します。 私たちの意図はスクロール位置を維持することです。

adapter.notifyItemRangeInserted(0, stringArrayListTemp.size()); 

を通じて達成しかし、私はビューのOnClickListenerが誤った位置を与え、その後、スクロールせずに任意の項目をクリックしていながら問題ができ 。 あなたは、アダプタのメソッドチェックすることができます。

@Override 
    public void onBindViewHolder(MyViewHolder holder, final int position) { 
     String item = moviesList.get(position); 
     holder.title.setText(item); 
     holder.title.setTag(position); 
     holder.title.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Log.e("onClick", "stringArrayList position: " + moviesList.get(position) + " - view position: " + moviesList.get((int) view.getTag())); 
      } 
     }); 
    } 

をしかしRecyclerviewのaddOnItemTouchListenerで同時にstringArrayList.get(position)で正しい位置を与えるが、のgetTagを使用して、間違った位置を与えます。

mRecyclerView.addOnItemTouchListener(
       new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() { 
      @Override 
      public void onItemClick(View view, int position) { 
       Log.e("onItemClick", "stringArrayList position: "+stringArrayList.get(position)+ " - view position: "+stringArrayList.get((int)view.getTag())); 
      } 
     })); 

リストの先頭に次のようにデータを追加しようとすると、正確な問題が発生します。

// retain scroll position and gives wrong position onClick 
    adapter.notifyItemRangeInserted(0, stringArrayListTemp.size()); 

// does not retain scroll position, scroll to top & gives right position onClick 
    //adapter.notifyDataSetChanged(); 
+0

recyclerview位置を維持する方法その

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { private final Typeface font; public TextView mTitle, mDetail, mDate, mCategory; public CheckBox mCheckBox; public ImageButton mImageButton; public ImageView mImage; public View mview; private SparseBooleanArray selectedItems = new SparseBooleanArray(); public MyViewHolder(View view) { super(view); mTitle = (TextView) view.findViewById(R.id.item_title); mDetail = (TextView) view.findViewById(R.id.item_detail); mImage = (ImageView) view.findViewById(R.id.item_thumbnail); mDate = (TextView) view.findViewById(R.id.date); mCategory = (TextView) view.findViewById(R.id.category); mCheckBox = (CheckBox) view.findViewById(R.id.checkbox); mImageButton = (ImageButton) view.findViewById(R.id.imageButton); mview = view; view.setOnClickListener(this); view.setOnLongClickListener(this); } @Override public void onClick(View v) { CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); CustomTabsIntent customTabsIntent = builder.build(); customTabsIntent.launchUrl(MainActivity.activity, Uri.parse(mDataSet.get(getAdapterPosition()).getPostLink())); } 

のようないくつかのことを試してみてください。問題が発生した部分だけを投稿してください。 –

答えて

0

私のためにこのコードの仕事は、それがさらに混乱作っているので、質問から不要なコードを削除し、私は

public void setRecyclerViewLayoutManager(LayoutManagerType layoutManagerType) { 
    int scrollPosition = 0; 

    if (mRecyclerView.getLayoutManager() != null) { 
     scrollPosition = ((LinearLayoutManager) mRecyclerView.getLayoutManager()) 
       .findFirstCompletelyVisibleItemPosition(); 
    } 

    switch (layoutManagerType) { 
     case GRID_LAYOUT_MANAGER: 
      mLayoutManager = new GridLayoutManager(getActivity(), SPAN_COUNT); 
      mCurrentLayoutManagerType = LayoutManagerType.GRID_LAYOUT_MANAGER; 
      break; 
     case LINEAR_LAYOUT_MANAGER: 
      mLayoutManager = new LinearLayoutManager(getActivity()); 
      mCurrentLayoutManagerType = LayoutManagerType.LINEAR_LAYOUT_MANAGER; 
      break; 
     default: 
      mLayoutManager = new LinearLayoutManager(getActivity()); 
      mCurrentLayoutManagerType = LayoutManagerType.LINEAR_LAYOUT_MANAGER; 
    } 

    mRecyclerView.setLayoutManager(mLayoutManager); 
    mRecyclerView.scrollToPosition(scrollPosition); 
} 
+0

私のコードを実行してチェックしましたか?私は、URコードで新しい何かを見つけることはありません。私はリストの先頭にデータをロードし、その位置を維持しなければならないということです。さもなければ、それは完全に私のコードで動作します。 –

+0

あなたのRecyclerviewに50個のアイテムを持たせてください。51個のアイテムがある場合は、recyclerviewの最初に51個のアイテムを追加したいですか? – Hamza

+0

yes正確には15個のデータ(Item0〜Item14)私はより多くのデータをロードするようになります(項目-1〜項目-1)。だから私のリストはItem -15、Item -14 ... Item0、Item1、...、Item15のようになります。 –

関連する問題