0

私はAndroidの初心者です。私がTabLayoutでフラグメント内のListViewを使用したとき、すべてが大丈夫でした。 enter image description here そして今、私は、TabLayoutを使ってフラグメント内のCardView行を使ってRecyclerViewを実装したいと思います。 ただし、CardViewでRecyclerViewを使用すると、フラグメントにコンテンツが表示されません。どうして? enter image description hereフラグメント内のCardViewでRecyclerviewがコンテンツを表示できないのはなぜですか?

助けてください!前もって感謝します!ここで

は私のコードです:

MainActivity.java:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // 关联ViewPager和SampleFragmentPagerAdapter,配置tabs用以下两个步骤: 

     // ① Get the ViewPager and set it's PagerAdapter so that it can display items 
     ViewPager viewPager=(ViewPager) findViewById(R.id.viewpager); 
     viewPager.setAdapter(new SampleFragmentPagerAdapter(getSupportFragmentManager(),MainActivity.this)); 

     // ② 为了关联pager和tabs,在TabLayout中设置ViewPager 
     TabLayout tabLayout=(TabLayout) findViewById(R.id.sliding_tabs); 
     tabLayout.setupWithViewPager(viewPager); 
    } 

    public class SampleFragmentPagerAdapter extends FragmentPagerAdapter{ 
     final int PAGE_COUNT=3; 
     private String[] tabTitles={"知乎日报","果壳精选","豆瓣一刻"}; 
     private Context context; 

     public SampleFragmentPagerAdapter(FragmentManager fm, Context context) { 
      super(fm); 
      this.context = context; 
     } 

     @Override 
     public int getCount() { 
      return PAGE_COUNT; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return PageFragment.newInstance(position+1); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return tabTitles[position]; 
     } 
    } 
} 

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.sherrywong.stonedaily.MainActivity"> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/sliding_tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:tabMode="fixed" 
     app:tabGravity="fill"> 
    </android.support.design.widget.TabLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="0px" 
     android:layout_weight="1" 
     android:background="@android:color/white"> 
    </android.support.v4.view.ViewPager> 

</LinearLayout> 

PageFragment.java:

public class PageFragment extends Fragment{ 
    private String TAG=PageFragment.class.getName(); // 打印log时使用 
    private static final String ARG_PAGE = "ARG_PAGE"; 
    private int mPage; 
    private RecyclerView recyclerView; 
    private MyAdapter myAdapter; 

    private OnFragmentInteractionListener mListener; 

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

    /** 
    * Use this factory method to create a new instance of 
    * this fragment using the provided parameters. 
    * @param page 
    * @return A new instance of fragment PageFragment. 
    */ 
    public static PageFragment newInstance(int page) { 
     Bundle args=new Bundle(); 
     args.putInt(ARG_PAGE,page); 
     PageFragment fragment=new PageFragment(); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    //Store instance variables based on arguments passed 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.i(TAG,"---------onCreate"); 
     if (getArguments() != null) { 
      mPage=getArguments().getInt(ARG_PAGE); 
     } 


    } 

    /** 
    * Define fragment layout 
    * @param inflater 
    * @param container 
    * @param savedInstanceState 
    * @return View 
    */ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view=inflater.inflate(R.layout.fragment_page,container,false); 
     // 获取RecyclerView 
     recyclerView=(RecyclerView) view.findViewById(R.id.recycler_list); 
     // 设置布局管理器 
     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     // 设置ItemAnimator 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     // 设置固定大小 
     recyclerView.setHasFixedSize(true); 
     // 初始化自定义适配器 
     String[] list={"class 1","class 2","class 3","class 4","class 5","class 6","class 7","class 8"}; 
     myAdapter=new MyAdapter(getActivity(),getData(list)); 
     // 为recyclerView设置适配器 
     recyclerView.setAdapter(myAdapter); 

     Log.i(TAG,"---------onCreateView"); 
     return view; 
    } 

    public interface OnFragmentInteractionListener { 
     void onFragmentInteraction(Uri uri); 
    } 
/* 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 

     System.out.println(l.getChildAt(position)); 
     HashMap<String,String> view=(HashMap<String, String>) l.getItemAtPosition(position); 
     System.out.println(view.get("title").toString()+"+++++++++title"); 

     Toast.makeText(getActivity(),TAG+l.getItemIdAtPosition(position),Toast.LENGTH_SHORT).show(); 
     System.out.println(v); 
     System.out.println(position); 

    } 
*/ 

    private List<HashMap<String,String>> getData(String[] args){ 
     List<HashMap<String,String>> list=new ArrayList<>(); 
     for (int i=0;i<args.length;i++){ 
      HashMap<String,String> map=new HashMap<>(); 
      map.put("title",args[i]); 
      map.put("image","http://img3.hao123.com/data/1_8583424a3f55c06ebeafce438a637c0d_0"); 
      list.add(map); 
     } 
     return list; 
    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     Log.i(TAG,"-----------onActivityCreated"); 
    } 

} 

MyAdapter.java:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { 

    private Context context; 
    private List<HashMap<String,String>> dataSet; 

    public MyAdapter(Context context,List<HashMap<String,String>> dataSet){ 
     this.context=context; 
     this.dataSet=dataSet; 
    } 

    // Provide a reference to the views for each data item 
    // Complex data items may need more than one view per item, and 
    // you provide access to all the views for a data item in a view holder 
    public static class MyViewHolder extends RecyclerView.ViewHolder{ 
     // each data item is just a string in this case. 
     public TextView textView; 
     public ImageView imageView; 
     public MyViewHolder(View view){ 
      super(view); 
      textView=(TextView) view.findViewById(R.id.itemTitle); 
      imageView=(ImageView) view.findViewById(R.id.itemImage); 
     } 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     // 给ViewHolder设置布局文件 
     View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item,parent,false); 
     return new MyViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     // 给ViewHolder设置元素 
     Picasso.with(context).load(dataSet.get(position).get("image")).into(holder.imageView); 
     holder.textView.setText(dataSet.get(position).get("title")); 
    } 

    @Override 
    public int getItemCount() { 
     // 返回数据总数 
     return dataSet==null?0:dataSet.size(); 
    } 


} 

fragment_page.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.sherrywong.stonedaily.PageFragment"> 

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

</RelativeLayout> 

card_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView 
    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="96dp" 
    android:orientation="horizontal"> 

     <TextView 
      android:id="@+id/itemTitle" 
      android:layout_weight="1" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="center_vertical"/> 

     <ImageView 
      android:id="@+id/itemImage" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_gravity="center_vertical"/> 

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

答えて

0
Picasso.with(context).load(dataSet.get(position).get("image")).into(holder.imageView); 

//変更コードの行上記

Picasso.with(holder.imageView.getContext()).load(dataSet.get(position).get("image")).into(holder.imageView); 
関連する問題