有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android Recyclerview不显示任何数据

我把this tutorial作为参考。 尽管检查了所有内容,但屏幕上没有显示任何数据,即主活动。关于这个问题,我已经提到了stackoverflow的其他页面。找不到可行的解决方案

注意:在设备上部署应用程序时没有警告或错误

这是源代码

主要活动。爪哇:

public class MainActivity extends Activity
{
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;

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

    mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mAdapter = new MyRecyclerViewAdapter(getDataSet());
    mRecyclerView.setAdapter(mAdapter);
    RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(this, LinearLayoutManager.VERTICAL);
    mRecyclerView.addItemDecoration(itemDecoration);

    // Code to Add an item with default animation
    DataObject obj = new DataObject("red", "foo");
    ((MyRecyclerViewAdapter) mAdapter).addItem(obj, 0);

    // Code to remove an item with default animation
    //((MyRecyclerViewAdapter) mAdapter).deleteItem(index);
}

@Override
protected void onResume() {
    super.onResume();
    ((MyRecyclerViewAdapter) mAdapter).setOnItemClickListener(new MyRecyclerViewAdapter.MyClickListener()
    {
        @Override
        public void onItemClick(int position, View v) {
            Toast.makeText(MainActivity.this, "Clicked item: " + position, Toast.LENGTH_SHORT).show();
        }
    });
}

private ArrayList<DataObject> getDataSet() {
    ArrayList results = new ArrayList<DataObject>();
    for (int index = 0; index < 20; index++){
        DataObject obj = new DataObject("Some Primary Text " + index, "Secondary " + index);
        results.add(index, obj);
    }
    return results;
}
}

数据对象。爪哇:

public class DataObject {
private String mText1;
private String mText2;

DataObject (String text1, String text2){
    mText1 = text1;
    mText2 = text2;
}

public String getmText1() {
    return mText1;
}

public void setmText1(String mText1) {
    this.mText1 = mText1;
}

public String getmText2() {
    return mText2;
}

public void setmText2(String mText2) {
    this.mText2 = mText2;
}
}

我的循环水。爪哇:

public class MyRecyclerViewAdapter extends     RecyclerView.Adapter<MyRecyclerViewAdapter.DataObjectHolder>
{
private static String LOG_TAG = "MyRecyclerViewAdapter";
private ArrayList<DataObject> mDataset;
private static MyClickListener myClickListener;

public static class DataObjectHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
    TextView label;
    TextView dateTime;

    public DataObjectHolder(View itemView)
    {
        super(itemView);
        label = (TextView) itemView.findViewById(R.id.textView);
        dateTime = (TextView) itemView.findViewById(R.id.textView2);
        Log.i(LOG_TAG, "Adding Listener");
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        myClickListener.onItemClick(getPosition(), v);
    }
}

public void setOnItemClickListener(MyClickListener myClickListener) {
    this.myClickListener = myClickListener;
}

public MyRecyclerViewAdapter(ArrayList<DataObject> myDataset) {
    mDataset = myDataset;
}

@Override
public DataObjectHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item, parent, false);
    DataObjectHolder dataObjectHolder = new DataObjectHolder(view);
    return dataObjectHolder;
}

@Override
public void onBindViewHolder(DataObjectHolder holder, int position) {
    holder.label.setText(mDataset.get(position).getmText1());
    holder.dateTime.setText(mDataset.get(position).getmText2());
}

public void addItem(DataObject dataObj, int index) {
    mDataset.add(dataObj);
    notifyItemInserted(index);
}

public void deleteItem(int index) {
    mDataset.remove(index);
    notifyItemRemoved(index);
}

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

public interface MyClickListener {
    public void onItemClick(int position, View v);
}
}

分割装饰。爪哇

public class DividerItemDecoration extends RecyclerView.ItemDecoration{
private static final int[] ATTRS = new int[]{
        安卓.R.attr.listDivider
};
public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;
public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;
private Drawable mDivider;
private int mOrientation;
public DividerItemDecoration(Context context, int orientation) {
    final TypedArray a = context.obtainStyledAttributes(ATTRS);
    mDivider = a.getDrawable(0);
    a.recycle();
    setOrientation(orientation);
}
public void setOrientation(int orientation) {
    if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {
        throw new IllegalArgumentException("invalid orientation");
    }
    mOrientation = orientation;
}
@Override
public void onDraw(Canvas c, RecyclerView parent) {
    if (mOrientation == VERTICAL_LIST) {
        drawVertical(c, parent);
    } else {
        drawHorizontal(c, parent);
    }
}
public void drawVertical(Canvas c, RecyclerView parent) {
    final int left = parent.getPaddingLeft();
    final int right = parent.getWidth() - parent.getPaddingRight();
    final int childCount = parent.getChildCount();
    for (int i = 0; i < childCount; i++) {
        final View child = parent.getChildAt(i);
        final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                .getLayoutParams();
        final int top = child.getBottom() + params.bottomMargin;
        final int bottom = top + mDivider.getIntrinsicHeight();
        mDivider.setBounds(left, top, right, bottom);
        mDivider.draw(c);
    }
}
public void drawHorizontal(Canvas c, RecyclerView parent) {
    final int top = parent.getPaddingTop();
    final int bottom = parent.getHeight() - parent.getPaddingBottom();
    final int childCount = parent.getChildCount();
    for (int i = 0; i < childCount; i++) {
        final View child = parent.getChildAt(i);
        final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                .getLayoutParams();
        final int left = child.getRight() + params.rightMargin;
        final int right = left + mDivider.getIntrinsicHeight();
        mDivider.setBounds(left, top, right, bottom);
        mDivider.draw(c);
    }
}
@Override
public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
    if (mOrientation == VERTICAL_LIST) {
        outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
    } else {
        outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
    }
}
}

主要活动。xml

<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<ScrollView
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent">
    <RelativeLayout
        安卓:layout_width="match_parent"
        安卓:layout_height="wrap_content">
        <安卓.support.v7.widget.RecyclerView
            安卓:id="@+id/my_recycler_view"
            安卓:layout_width="match_parent"
            安卓:layout_height="match_parent"
            安卓:scrollbars="vertical" />
    </RelativeLayout>
</ScrollView>

回收物品。xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:background="?安卓:attr/selectableItemBackground"
安卓:orientation="vertical">
<TextView
    安卓:id="@+id/textView"
    安卓:layout_width="wrap_content"
    安卓:layout_height="wrap_content"
    安卓:paddingLeft="@dimen/activity_horizontal_margin"
    安卓:paddingTop="5dp"
    安卓:text="Large Text"
    安卓:textAppearance="?安卓:attr/textAppearanceLarge" />
<TextView
    安卓:id="@+id/textView2"
    安卓:layout_width="wrap_content"
    安卓:layout_height="wrap_content"
    安卓:paddingBottom="5dp"
    安卓:paddingLeft="@dimen/activity_horizontal_margin"
    安卓:text="Small Text"
    安卓:textAppearance="?安卓:attr/textAppearanceSmall" />
</LinearLayout>

共 (1) 个答案

  1. # 1 楼答案

    问题出在活动中。xml。你应该删除ScrollView,它就会工作(因为recyclerview有一个隐式视图,所以没有理由使用它)。本教程中也没有滚动视图:检查“活动”\u“回收器”\u视图。xml