【问题标题】:ArrayList not displaying in RecyclerView but no errors shownArrayList 未显示在 RecyclerView 中,但未显示错误
【发布时间】:2018-11-12 17:42:13
【问题描述】:

我有一个未在 RecyclerView 中显示的数组列表。 arraylist 有数据,但我的 RecyclerView 适配器没有显示错误,我的片段活动也没有显示错误。我完全不知道编程错误在哪里。 getItemCount 似乎正确,持有者似乎正确,片段似乎正确,但我知道某处有错误。这是我的代码:

片段:

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;


}

}

这里是 PlanetData 类:

 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;
}

}

这是我的 RecyclerView 适配器:

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();
}

}

【问题讨论】:

    标签: java android android-recyclerview


    【解决方案1】:

    我没有看到您实际上将任何内容添加到 items 列表中。

    您在onCreateView() 中调用planetList(),但您没有使用它的结果,并且planetList() 不会以任何方式影响items:它会创建自己的ArrayList 并返回它。

    planetList() 方法中删除planetValues 并直接引用items

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

    或者调用时将planetList()的结果设置为items

    items.addAll(planetList());
    

    【讨论】:

      【解决方案2】:

      您尚未填充项目。

      items = planetList();
      

      【讨论】:

        猜你喜欢
        • 2018-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        相关资源
        最近更新 更多