###前提・実現したいこと
RecyclerViewを用いた画面を作成しています。
スワイプで画面を切り替えると自動でスクロールしてしまいます。
なぜ勝手にスクロールしてしまうのか理由がわかりません。
そもそもこのようなレイアウトは不可能なのでしょうか。
###発生している問題・エラーメッセージ
RecyclerView - View - RecyclerViewという順で
LinearLayoutのVerticalで配置しています。
真ん中のViewが表示される位置までスクロールした状態で、
スワイプで画面を切り替え、元に戻ると、
下部のRecyclerViewの上端がレイアウトのトップの位置に
自動でスクロールしてしまいます。
エラーメッセージは特にありません。
起動直後
真ん中のViewが表示される位置までスクロール
スワイプで画面切り替え
元のページに戻り中
元のページに戻りきった直後にScrollToされたかのように位置が変わる
###該当のソースコード
activity_main.xml
xml
1<?xml version="1.0" encoding="utf-8"?> 2<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent"> 6 <android.support.design.widget.AppBarLayout 7 android:layout_width="match_parent" 8 android:layout_height="wrap_content"> 9 <android.support.v7.widget.Toolbar 10 android:id="@+id/toolbar" 11 android:layout_width="match_parent" 12 android:layout_height="?attr/actionBarSize" 13 android:background="?attr/colorPrimary" 14 app:layout_scrollFlags="scroll|enterAlways" /> 15 <android.support.design.widget.TabLayout 16 android:id="@+id/tab_layout" 17 android:layout_width="match_parent" 18 android:layout_height="wrap_content" 19 android:background="?attr/colorPrimary" 20 app:tabIndicatorColor="#FFFF8D" /> 21 </android.support.design.widget.AppBarLayout> 22 <android.support.v4.view.ViewPager 23 android:id="@+id/view_pager" 24 app:layout_behavior="@string/appbar_scrolling_view_behavior" 25 android:layout_width="match_parent" 26 android:layout_height="wrap_content"/> 27</android.support.design.widget.CoordinatorLayout>
MainActivity.java
java
1public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener { 2 @Override 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.activity_main); 6 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 7 setSupportActionBar(toolbar); 8 FragmentPagerAdapter adapter = new FragmentPagerAdapter(getSupportFragmentManager()) { 9 @Override 10 public Fragment getItem(int position) { 11 return BlankFragment.newInstance("", ""); 12 } 13 @Override 14 public CharSequence getPageTitle(int position) { 15 return "tab " + (position + 1); 16 } 17 @Override 18 public int getCount() { 19 return 2; 20 } 21 }; 22 ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager); 23 viewPager.setAdapter(adapter); 24 TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 25 tabLayout.setupWithViewPager(viewPager); 26 } 27 @Override 28 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 29 } 30 @Override 31 public void onPageSelected(int position) { 32 } 33 @Override 34 public void onPageScrollStateChanged(int state) { 35 } 36}
RecyclerAdapter.java
java
1public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { 2 private LayoutInflater mInflater; 3 private ArrayList<String> mData; 4 public RecyclerAdapter(Context context, ArrayList<String> data) { 5 mInflater = LayoutInflater.from(context); 6 mData = data; 7 } 8 @Override 9 public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 10 return new ViewHolder(mInflater.inflate(R.layout.list_item, viewGroup, false)); 11 } 12 @Override 13 public void onBindViewHolder(ViewHolder viewHolder, final int i) { 14 if (mData != null && mData.size() > i && mData.get(i) != null) { 15 viewHolder.textView.setText(mData.get(i)); 16 if (i % 2 == 0) { 17 viewHolder.textView.setBackgroundColor(Color.argb(0x44, 0xff, 0x00, 0x00)); 18 } else { 19 viewHolder.textView.setBackgroundColor(Color.argb(0x44, 0x00, 0x00, 0xff)); 20 } 21 } 22 } 23 @Override 24 public int getItemCount() { 25 if (mData != null) { 26 return mData.size(); 27 } else { 28 return 0; 29 } 30 } 31 class ViewHolder extends RecyclerView.ViewHolder { 32 TextView textView; 33 public ViewHolder(View itemView) { 34 super(itemView); 35 textView = (TextView) itemView.findViewById(R.id.list_item_text); 36 } 37 } 38}
BlankFragment.java
java
1public class BlankFragment extends Fragment { 2 private static final String ARG_PARAM1 = "param1"; 3 private static final String ARG_PARAM2 = "param2"; 4 private String mParam1; 5 private String mParam2; 6 private View mRootView; 7 public BlankFragment() { 8 } 9 public static BlankFragment newInstance(String param1, String param2) { 10 BlankFragment fragment = new BlankFragment(); 11 Bundle args = new Bundle(); 12 args.putString(ARG_PARAM1, param1); 13 args.putString(ARG_PARAM2, param2); 14 fragment.setArguments(args); 15 return fragment; 16 } 17 @Override 18 public void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 if (getArguments() != null) { 21 mParam1 = getArguments().getString(ARG_PARAM1); 22 mParam2 = getArguments().getString(ARG_PARAM2); 23 } 24 } 25 @Override 26 public View onCreateView(LayoutInflater inflater, ViewGroup container, 27 Bundle savedInstanceState) { 28 mRootView = inflater.inflate(R.layout.fragment_blank, container, false); 29 return mRootView; 30 } 31 @Override 32 public void onAttach(Context context) { 33 super.onAttach(context); 34 } 35 @Override 36 public void onDetach() { 37 super.onDetach(); 38 } 39 @Override 40 public void onActivityCreated(@Nullable Bundle savedInstanceState) { 41 super.onActivityCreated(savedInstanceState); 42 ArrayList<String> upperArray = new ArrayList<>(); 43 for (Integer i=0; i<10; i++) { 44 upperArray.add("upper " + i.toString()); 45 } 46 RecyclerAdapter upperAdapter = new RecyclerAdapter(getActivity(), upperArray); 47 RecyclerView mRecyclerView = (RecyclerView) mRootView.findViewById(R.id.upper_recycler_view); 48 mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 49 mRecyclerView.setAdapter(upperAdapter); 50 ArrayList<String> lowerArray = new ArrayList<>(); 51 for (Integer i=0; i<10; i++) { 52 lowerArray.add("lower " + i.toString()); 53 } 54 RecyclerAdapter lowerAdapter = new RecyclerAdapter(getActivity(), lowerArray); 55 RecyclerView mRecyclerView2 = (RecyclerView) mRootView.findViewById(R.id.lower_recycler_view); 56 mRecyclerView2.setLayoutManager(new LinearLayoutManager(getActivity())); 57 mRecyclerView2.setAdapter(lowerAdapter); 58 } 59}
fragment_blank.xml
xml
1<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:orientation="vertical" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" > 5 <android.support.v4.widget.NestedScrollView 6 android:layout_width="match_parent" 7 android:layout_height="match_parent"> 8 <LinearLayout 9 android:orientation="vertical" 10 android:layout_width="match_parent" 11 android:layout_height="match_parent"> 12 <android.support.v7.widget.RecyclerView 13 android:id="@+id/upper_recycler_view" 14 android:layout_width="match_parent" 15 android:layout_height="wrap_content" /> 16 <View 17 android:background="#ff00ff00" 18 android:layout_width="match_parent" 19 android:layout_height="200dp" /> 20 <android.support.v7.widget.RecyclerView 21 android:id="@+id/lower_recycler_view" 22 android:layout_width="match_parent" 23 android:layout_height="wrap_content" /> 24 </LinearLayout> 25 </android.support.v4.widget.NestedScrollView> 26</LinearLayout>
build.gradleのdependencies
gradle
1dependencies { 2 compile fileTree(dir: 'libs', include: ['*.jar']) 3 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 4 exclude group: 'com.android.support', module: 'support-annotations' 5 }) 6 compile 'com.android.support:appcompat-v7:24.2.1' 7 compile 'com.android.support:design:24.2.1' 8 compile 'com.android.support:support-v4:24.2.1' 9 compile 'com.android.support:recyclerview-v7:24.2.1' 10 testCompile 'junit:junit:4.12' 11}
###試したこと
真ん中のViewが表示されない位置で試すと再現しない
エミュレータでも試してみましたが同様の結果でした。
###補足情報(言語/FW/ツール等のバージョンなど)
端末: xperia z1
OS: Android 4.4.2
開発環境: Android studio 2.2.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/11/14 12:13 編集
2016/11/12 11:36
退会済みユーザー
2016/11/14 12:13 編集
2016/11/12 12:20
退会済みユーザー
2016/11/14 12:13 編集
2016/11/12 12:44
退会済みユーザー
2016/11/14 12:13 編集
退会済みユーザー
2016/11/14 12:13 編集
2016/11/12 13:43
退会済みユーザー
2016/11/14 12:14 編集
退会済みユーザー
2016/11/14 12:14 編集