【问题标题】:Can someone explain me this behaviour of recycler view?有人可以向我解释这种回收者视图的行为吗?
【发布时间】:2017-05-27 11:56:28
【问题描述】:

我正在学习 recyclerview 并且只是在尝试一些示例,我遇到了这个...... 当我尝试对我的列表使用垂直方向时,它的结果是所需的输出是这样的:

如果我将其更改为水平,那么我的视图是这样的:

我的xml如下图

    <?xml version="1.0" encoding="utf-8"?>

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:background="@color/material100Green"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/rv_numbers"/>
</FrameLayout>

我的主要活动:

public class MainActivity extends AppCompatActivity {

    private static final int NUM_LIST_ITEMS = 100;

    private GreenAdapter mAdapter;
    private RecyclerView mNumbersList;

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


        mNumbersList = (RecyclerView) findViewById(R.id.rv_numbers);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,true);
        mNumbersList.setLayoutManager(layoutManager);

        mNumbersList.setLayoutManager(layoutManager);

        mNumbersList.setHasFixedSize(true);

        /*
         * The GreenAdapter is responsible for displaying each item in the list.
         */
        mAdapter = new GreenAdapter(NUM_LIST_ITEMS);

        mNumbersList.setAdapter(mAdapter);
    }
}

GreenAdapter如下图:

public class GreenAdapter extends RecyclerView.Adapter<GreenAdapter.NumberViewHolder> {

    private static final String TAG = GreenAdapter.class.getSimpleName();

    private int mNumberItems;

    public GreenAdapter(int numberOfItems) {
        mNumberItems = numberOfItems;
    }

    @Override
    public NumberViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        Context context = viewGroup.getContext();
        int layoutIdForListItem = R.layout.number_list_item;
        LayoutInflater inflater = LayoutInflater.from(context);
        boolean shouldAttachToParentImmediately = false;

        View view = inflater.inflate(layoutIdForListItem, viewGroup, shouldAttachToParentImmediately);
        NumberViewHolder viewHolder = new NumberViewHolder(view);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(NumberViewHolder holder, int position) {
        Log.d(TAG, "#" + position);
        holder.bind(position);
    }

    @Override
    public int getItemCount() {
        return mNumberItems;
    }

    class NumberViewHolder extends RecyclerView.ViewHolder {


        TextView listItemNumberView;

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

            listItemNumberView = (TextView) itemView.findViewById(R.id.tv_item_number);
        }

        /**
         * This method will take an integer as input and
         * use that integer to display the appropriate text within a list item.
         * @param listIndex Position of the item in the list
         */
        void bind(int listIndex) {
            listItemNumberView.setText(String.valueOf(listIndex));
        }
    }
}

有人可以解释一下上述行为吗? 如果有人可以引用在水平滚动时显示至少 4-5 个项目的解决方案,将不胜感激:)

提前致谢!

【问题讨论】:

  • 在您的 number_list_item xml 中将 wrap_content 设置为父布局
  • 感谢@DivyeshPatel 成功了(y)

标签: android android-recyclerview


【解决方案1】:

正如戴维什·帕特尔所说

在您的 number_list_item xml 中将 wrap_content 设置为父布局

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2013-11-30
    • 1970-01-01
    • 2022-12-16
    • 2021-12-11
    • 1970-01-01
    • 2020-02-23
    相关资源
    最近更新 更多