简体   繁体   中英

ArrayList not displaying in RecyclerView but no errors shown

I've have an arraylist that is not displaying in RecyclerView. The arraylist has data but my RecyclerView Adapter shows no error, nor is my fragment activity showing no errors. I am at a complete loss where the programming error is. The getItemCount seems correct, the holder seems correct and the Fragment seems to be correct but I know there is a mistake somewhere. Here is my code:

Fragment:

public class TestFragment extends Fragment {
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
List<PlanetData> items = new ArrayList<>();
RecyclerView mRecyclerView;
PlanetRecyclerViewAdapter adapter;

private OnFragmentInteractionListener mListener;

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

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


    }


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


    planetList();



        // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_test, container, false);



    mRecyclerView = (RecyclerView)view.findViewById(R.id.planet_recycler_view);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    mRecyclerView.addItemDecoration(new DividerItemDecoration(mRecyclerView.getContext(),DividerItemDecoration.VERTICAL));

    adapter = new PlanetRecyclerViewAdapter(items, mRecyclerView.getContext());
    mRecyclerView.setAdapter(adapter);




        return view;
    }


// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        mListener.onFragmentInteraction(uri);
    }
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}
public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onFragmentInteraction(Uri uri);
}

private List<PlanetData> planetList() {
    List<PlanetData> planetvalues = new ArrayList<>();

    planetvalues.add(new com.ksburneytwo.planetmathtest.PlanetData("12"));
    planetvalues.add(new com.ksburneytwo.planetmathtest.PlanetData(Double.toString(Mercury.getMercuryRA())));
    planetvalues.add(new com.ksburneytwo.planetmathtest.PlanetData(Double.toString(Venus.getVenusRA())));
    planetvalues.add(new com.ksburneytwo.planetmathtest.PlanetData(Double.toString(Moon.getMoonRA())));
    planetvalues.add(new com.ksburneytwo.planetmathtest.PlanetData(Double.toString(Mars.getMarsRA())));
    planetvalues.add(new com.ksburneytwo.planetmathtest.PlanetData(Double.toString(Jupiter.getJupiterRA())));
    planetvalues.add(new com.ksburneytwo.planetmathtest.PlanetData(Double.toString(Saturn.getSaturnRA())));
    planetvalues.add(new com.ksburneytwo.planetmathtest.PlanetData(Double.toString(Uranus.getUranusRA())));
    planetvalues.add(new com.ksburneytwo.planetmathtest.PlanetData(Double.toString(Neptune.getNeptuneRA())));
    planetvalues.add(new com.ksburneytwo.planetmathtest.PlanetData(Double.toString(Pluto.getPlutoRA())));

    System.out.println("This is Arraylist:" + planetvalues);

    return planetvalues;


}

}

Here is the PlanetData class:

 public class PlanetData {
private String PlanetRA;

public PlanetData(String PlanetRA) {
    this.PlanetRA = PlanetRA;
}

@Override
public String toString() {
    return PlanetRA;
}

public String getPlanetRA (){
    return PlanetRA;
}

public void setPlanetRA(String PlanetRA){
    this.PlanetRA = PlanetRA;
}

}

Here is my RecyclerView Adapter:

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

private List<PlanetData> mPlanetDataList;
Context mContext;

public static class ViewHolder extends RecyclerView.ViewHolder{

    public TextView currentRA;

    public ViewHolder(View itemView) {
        super(itemView);

        currentRA = (TextView) itemView.findViewById(R.id.planet_location);


    }

}

public PlanetRecyclerViewAdapter(List<PlanetData> mPlanetDataList, Context mContext){
    this.mPlanetDataList = mPlanetDataList;
    this.mContext = mContext;
}

@Override
public PlanetRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.planet_recycler_item,parent, false);



    return new ViewHolder(itemView);
}

@Override
public void onBindViewHolder( PlanetRecyclerViewAdapter.ViewHolder holder, int position) {
holder.currentRA.setText(mPlanetDataList.get(position).getPlanetRA());

}

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

}

您尚未填充项目。

items = planetList();

I don't see you ever actually adding anything to the items list.

You call planetList() in onCreateView() , but you aren't using the result of it, and planetList() doesn't affect items in any way: it makes its own ArrayList and returns that.

Either remove planetValues from the planetList() method and reference items directly:

private void planetList() { //changed signature to "void"
    items.add(...);
    items.add(...);
    //etc
}

Or set the result of planetList() to items when you call it:

items.addAll(planetList());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM