StaggeredGrid RecyclerView没有显示任何内容

时间:2015-10-01 18:59:40

标签: java android android-fragments android-recyclerview recycler-adapter

我试图给一个具有StaggeredGrid布局的RecyclerView充气,但它没有显示任何内容。我几乎复制了以前用过RecyclerView的代码,所以我有点难过。

MuseumStoriesViewHolder.onCreateViewHolder()中,持有人的回复具有以下价值ViewHolder{337ec22b position=-1 id=-1, oldPos=-1, pLpos:-1 unboundundefined adapter position no parent}我不确定这是否属实,但这对我来说似乎是件好事。

也可能有助于知道我给这个RecyclerView充气的片段是一个嵌套的片段。

非常感谢任何帮助。

MuseumFragment

    package com.example.android.radiobuttontestproject.fragments;

import android.app.Activity;
import android.os.Bundle;
import android.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.android.radiobuttontestproject.R;
import com.example.android.radiobuttontestproject.adapters.MuseumStoriesAdapter;
import com.example.android.radiobuttontestproject.helpers.pojo.StoryObject;
import com.example.android.radiobuttontestproject.test.SampleDataFactory;

import java.util.List;

import butterknife.Bind;
import butterknife.ButterKnife;

public class MuseumFragment extends Fragment {

    private List<StoryObject> storyObjectList;
    private StaggeredGridLayoutManager storyGridLayoutManager;
    private MuseumStoriesAdapter storyAdapter;


    @Bind(R.id.stories_recycler_view) RecyclerView storiesRecyclerView;

    public static MuseumFragment newInstance() {
        MuseumFragment fragment = new MuseumFragment();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }

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

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_museum, container, false);
        ButterKnife.bind(this, view);

        //Sets up the stories
        SampleDataFactory sampleDataFactory = new SampleDataFactory();
        storyObjectList = sampleDataFactory.getSampleStories(
                getResources().getStringArray(R.array.test_titles_for_grid_museum1),
                getResources().getStringArray(R.array.test_desc_for_grid_museum1));
        storyGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        storiesRecyclerView.setLayoutManager(storyGridLayoutManager);
        storyAdapter = new MuseumStoriesAdapter(getActivity().getApplicationContext(), storyObjectList);
        storiesRecyclerView.setAdapter(storyAdapter);

        return view;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

}

MuseumStoriesAdapter

package com.example.android.radiobuttontestproject.adapters;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import com.example.android.radiobuttontestproject.R;
import com.example.android.radiobuttontestproject.helpers.pojo.StoryObject;

import java.util.List;

public class MuseumStoriesAdapter extends RecyclerView.Adapter<MuseumStoriesAdapter.MuseumStoriesViewHolder> {

    private List<StoryObject> itemList;
    private LayoutInflater inflater;

    private Context context;

    public MuseumStoriesAdapter(Context context, List<StoryObject> itemList) {
        this.itemList = itemList;
        this.context = context;
        inflater = LayoutInflater.from(this.context);
    }

    @Override
    public MuseumStoriesViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View view = inflater.inflate(R.layout.view_box_small, viewGroup, false);
        MuseumStoriesViewHolder holder = new MuseumStoriesViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MuseumStoriesViewHolder holder, int position) {
        holder.title.setText(itemList.get(position).getTitle());
        holder.desc.setText(itemList.get(position).getDescription());
    }

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

    class MuseumStoriesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public TextView type,title,desc;

        public MuseumStoriesViewHolder(View itemView) {
            super(itemView);
            //Tried Butterknife, but it doesn't seem like it was working in the view holder. - Peter
            type = (TextView) itemView.findViewById(R.id.small_box_type);
            title = (TextView) itemView.findViewById(R.id.small_box_title);
            desc = (TextView) itemView.findViewById(R.id.small_box_desc);
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            Toast.makeText(view.getContext(), "Clicked Position = " + getPosition(), Toast.LENGTH_SHORT).show();
        }
    }

}

fragment_museum.xml

<ScrollView
    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.android.radiobuttontestproject.fragments.MuseumFragment">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightSum="1">

        <TextView
            android:id="@+id/museum_header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/header_margin"
            android:gravity="center"
            android:textSize="@dimen/font_larger"
            android:text="@string/museum_header" />

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

    </LinearLayout>

</ScrollView>

view_box_small.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/small_box_margin"
    android:background="@color/small_box_background_color">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <!--TODO Make layout_height wrap contenet -->
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="120dp"
            android:background="@color/test_color2"/>

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:src="@drawable/abc_btn_rating_star_off_mtrl_alpha"
            />

    </FrameLayout>

    <TextView
        android:id="@+id/small_box_type"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="@dimen/font_small"
        android:textColor="@color/font_red"
        android:text="Object"
    />

    <TextView
        android:id="@+id/small_box_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="@dimen/font_large"
        android:textColor="@color/font_black"
        android:text="Sample Text Here"
    />

    <TextView
        android:id="@+id/small_box_desc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="@dimen/font_normal"
        android:textColor="@color/font_black"
        android:textStyle="italic"
        android:text="Sample Text Here"
    />



</LinearLayout>

0 个答案:

没有答案