2016-08-12 61 views
0

嗨我不擅長android。我有Android回收者視圖創建時滾動到某個位置

  • ViewPager

而且裏面ViewPager,有RecyclerView1。併爲它的項目,

  • 的FrameLayout
    • CardView
      • 的TextView
      • RecyclerView2

每當創建視圖時,屏幕會自動滾動到recyclerView2中的第一個元素,而不是RecyclerView1。

RecyclerView1具有somekind的分類的信息,所以我希望人們能看到

第一個元素RecyclerView1創建視圖時。

爲什麼會發生這種事?

加入: 在其他活動中使用listview時會發生類似的情況。

我有很多的上述卡的意見和ListView

  • cardview
  • cardview
  • 列表視圖

,並在這個活動呈現,屏幕會滾動到列表視圖的第一項不第一張卡片!

這裏是項目佈局RecyclerView1

<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:paddingLeft="1dp" 
android:paddingRight="1dp"> 

    <android.support.v7.widget.CardView 
     android:id="@+id/league_item_card" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     card_view:cardUseCompatPadding="true" 
     card_view:cardElevation="@dimen/leauge_card_elevation" 
     card_view:cardCornerRadius="@dimen/league_card_corner_radius"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      > 
      <!-- Header View --> 
      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:layout_margin="3dp" 
       > 
      <ImageView 
       android:id="@+id/league_logo" 
       android:padding="5dp" 
       android:layout_width="30dp" 
       android:layout_height="30dp" 
       android:src="@drawable/champions_logo" 
       /> 
      <TextView 
       android:id="@+id/league_name" 
       android:paddingLeft="4dp" 
       android:layout_weight="4" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:text="Champions League" 
       style="@style/league_name_text" 
      /> 
      <TextView 
       android:id="@+id/league_date" 
       android:textColor="@color/primary_dark" 
       android:layout_gravity="center" 
       android:gravity="center" 
       android:layout_weight="1" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:text="07/25" 
       /> 
      </LinearLayout> 

      <View 
       android:layout_width="match_parent" 
       android:layout_height="1dp" 
       android:background="@color/primary_dark"/> 

      <android.support.v7.widget.RecyclerView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/league_detail_recycler_view" > 
      </android.support.v7.widget.RecyclerView> 
     </LinearLayout> 

    </android.support.v7.widget.CardView> 

</FrameLayout> 

這裏是項目佈局RecyclerView2

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/detail_layout" 
    > 
    <TextView 
     android:id="@+id/league_team_name1" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     style="@style/league_team_name_text" 
     android:text="Manchester Utd" 
     android:layout_centerVertical="true" 
     android:layout_toLeftOf="@+id/league_team_image1"/> 

    <ImageView 
     android:layout_margin="@dimen/league_team_image_margin" 
     android:layout_height="50dp" 
     android:layout_width="50dp" 
     android:id="@+id/league_team_image1" 
     android:src="@drawable/manu" 
     android:layout_centerVertical="true" 
     android:layout_toLeftOf="@+id/league_score1" /> 

    <TextView 
     android:id="@+id/league_score1" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:text="2" 
     style="@style/league_name_text" 
     android:layout_centerVertical="true" 
     android:layout_toLeftOf="@+id/league_score_sperator" /> 
    <TextView 
     android:id="@+id/league_score_sperator" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:text=" : " 
     style="@style/league_team_name_text" 
     android:layout_centerInParent="true"/> 

    <TextView 
     android:id="@+id/league_score2" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:text="1" 
     style="@style/league_name_text" 
     android:layout_centerVertical="true" 
     android:layout_toRightOf="@+id/league_score_sperator"/> 

    <ImageView 
     android:layout_margin="@dimen/league_team_image_margin" 
     android:layout_height="50dp" 
     android:layout_width="50dp" 
     android:id="@+id/league_team_image2" 
     android:src="@drawable/chelsea" 
     android:layout_centerVertical="true" 
     android:layout_toRightOf="@+id/league_score2" /> 
    <TextView 

     android:id="@+id/league_team_name2" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     style="@style/league_team_name_text" 
     android:text="Chelsea" 
     android:layout_centerVertical="true" 
     android:layout_toRightOf="@+id/league_team_image2" /> 

    <TextView 
     android:id="@+id/league_game_status" 
     android:background="@color/accent" 
     android:layout_height="60dp" 
     android:gravity="center" 
     android:layout_width="30dp" 
     style="@style/league_name_text" 
     android:text="FT" 
     android:layout_centerVertical="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

</RelativeLayout> 

我覺得我沒有任何可獲得焦點的項

這是片段填充RecyclerView1

public class LeagueFragment extends Fragment { 

    private RecyclerView recyclerView; 
    private List<LeagueItemModel> leagueItems; 
    public static final String DATE= "date"; 
    public String currentDate; 

    public LeagueFragment() { 
     // Required empty public constructor 
    } 

    public static final LeagueFragment newInstance(String date) 
    { 
     // date as argument 
     LeagueFragment f = new LeagueFragment(); 
     Bundle bdl = new Bundle(); 
     bdl.putString(DATE, date); 
     f.setArguments(bdl); 
     return f; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.league_fragment, container, false); 

     currentDate = getArguments().getString(DATE); 

     // set up contents 
     recyclerView = (RecyclerView)view.findViewById(R.id.league_recycler_view); 
     setUpLeagueView(); 
     Log.d("league debug",String.valueOf(leagueItems.size())); 
     return view; 
    } 

    private void setUpProgress(){ 


    } 

    // Data Filling Method 
    private List<LeagueItemModel> fillData(){ 
     // use date 
     return null; 
    } 

    private void setUpLeagueView(){ 
     LinearLayoutManager manager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); 
     manager.setAutoMeasureEnabled(true); 
     //manager.scrollToPositionWithOffset(0,0); 

     recyclerView.setLayoutManager(manager); 

     // recyclerView Nested Scrolling behavior 
     //recyclerView.setNestedScrollingEnabled(false); 

     leagueItems = new ArrayList<>(30); 

     initializeLeagueCardItemList(); 

     //setting recyclerView! 
     recyclerView.setAdapter(new LeagueRecyclerAdapter(leagueItems,getActivity(),recyclerView)); 

     // Added! 
     //recyclerView.scrollToPosition(1); 

    } 

    private void initializeLeagueCardItemList(){ 
     // 
     LeagueItemModel cardItemModel; 
     String[] leagueName = getResources().getStringArray(R.array.league_name); 
     String[] leagueImage = getResources().getStringArray(R.array.league_image); 

     final int length = leagueName.length; 
     for(int i=0;i<length;i++){ 
      cardItemModel = new LeagueItemModel(leagueImage[i],leagueName[i],currentDate); 
      leagueItems.add(cardItemModel); 
     } 

     // cardItemModel = new LeagueItemModel(teamName1[i],teamName2[i],teamScore1[i],teamScore2[i],teamImage1[i],teamImage2[i]); 
    } 
} 

這是適配器填充RecyclerView2的項目

public class LeagueRecyclerAdapter extends RecyclerView.Adapter<LeagueRecyclerAdapter.ViewHolder>{ 

    public Context context; 
    public List<LeagueItemModel> cardItems; 
    public RecyclerView parentRecyclerView; 

    // Adapter Constructor 
    public LeagueRecyclerAdapter(List<LeagueItemModel> cardItems, Context context, RecyclerView recyclerView){ 
     this.cardItems = cardItems; 
     this.context=context; 
     this.parentRecyclerView=recyclerView; 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder{ 

     TextView leagueName, currentDate; 
     ImageView leagueImage; 
     RecyclerView detailRecyclerView; 
     public ViewHolder(View itemView){ 
      super(itemView); 
      this.leagueImage = (ImageView) itemView.findViewById(R.id.league_logo); 
      this.leagueName = (TextView) itemView.findViewById(R.id.league_name); 
      this.currentDate = (TextView) itemView.findViewById(R.id.league_date); 
      this.detailRecyclerView = (RecyclerView) itemView.findViewById(R.id.league_detail_recycler_view); 
     } 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.league_item,parent,false); 
     ViewHolder viewHolder = new ViewHolder(view); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, final int position) { 
     // onBindViewHolder is place onItemClickListener! 

     String leagueName = cardItems.get(position).leagueName; 
     // Pass somekind of game identifier! 
     holder.leagueName.setText(leagueName); 
     holder.currentDate.setText(cardItems.get(position).day); 

     String imageName = cardItems.get(position).leagueImageUrl; 
     String uri = "@drawable/" + imageName; // where myresource (without the extension) is the file 

     int imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName()); 
     Glide.with(context) 
       .load(imageResource) 
       .centerCrop() 
       .placeholder(R.drawable.loading_spinner) 
       .crossFade().into(holder.leagueImage); 

     //Fill RecyclerView! 
     setUpLeagueDetailView(holder.detailRecyclerView,leagueName); 

     //parentRecyclerView.scrollToPosition(0); 

    } 

    @Override 
    public int getItemCount() { 
     return cardItems.size(); 
    } 


    // Method for Inner League Items 

    public void fillDetailData(){ 


    } 

    //For Test 
    public List<LeagueDetailItemModel> detailItems; 
    private void setUpLeagueDetailView(RecyclerView recyclerView,String leagueName){ 
     // TODO did it with getActivity! Replace this in the collasing! 
     LinearLayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false); 
     manager.setAutoMeasureEnabled(true); 
     recyclerView.setLayoutManager(manager); 

     // This Important!! 
     recyclerView.setNestedScrollingEnabled(false); 


     //for test 
     detailItems = new ArrayList<>(30); 


     initializeDetailItemList(); 
     recyclerView.setAdapter(new LeagueDetailRecyclerAdapter(detailItems,context,leagueName)); 
    } 

    //Fill data into detailItems 
    private void initializeDetailItemList(){ 
     String[] teamName1 = getData(R.array.team_name); 
     String[] teamName2 = getData(R.array.team_name); 
     String[] teamImage1 = getData(R.array.team_image_name); 
     String[] teamImage2 = getData(R.array.team_image_name); 
     String[] teamScore1 = getData(R.array.team_score); 
     String[] teamScore2 = getData(R.array.team_score); 
     String[] status = getData(R.array.status); 
     final int length = 10; 
     LeagueDetailItemModel temp; 
     for(int i=0;i<length;i++){ 
      temp = new LeagueDetailItemModel(teamName1[0],teamName2[1],teamScore1[0],teamScore2[1],teamImage1[0],teamImage2[1],status[0]); 
      detailItems.add(temp); 
     } 
    } 

    private String[] getData(int id){ 
     return context.getResources().getStringArray(id); 
    } 

} 
+0

在代碼中你需要的答案將0比0的像素。只要提到文件,就可以幫助我們給你一個答案。 – Smit

+0

我添加了以前發生的代碼和相關問題 – amityaffliction

+0

你的活動文件在哪裏你實際上在渲染對象? – Smit

回答

0

如果RecyclerView2有像編輯文本一些可聚焦的項目,然後會出現此問題。

一兩件事你可以做的是編程方式設置RecyclerView1位置爲0

項目滾動從頂部linearLayoutManager.scrollToPositionWithOffset

+0

代碼補充。我沒有任何EditText ... – amityaffliction

+0

它沒有工作。第一個recyclerview調用scrollToPosition(0)也不起作用。 – amityaffliction