Как установить BaseAdapter для RecyclerView? - PullRequest
0 голосов
/ 04 июня 2018

Всякий раз, когда мне нужно реализовать пользовательский ListView или GridView.Я всегда использую класс BaseAdapter следующим образом:

public class CustomFlowerGridViewAdapter extends BaseAdapter {

private HashMap<String, String> mFlowerFeed = new HashMap<>();

private Context mContext;
static LayoutInflater mFlowerInflater = null;

CustomFlowerGridViewAdapter(Context context, ArrayList<HashMap<String, String>> data) {

    super();
    this.mContext = context;
    MainActivity.flowerArrayFeedList = data;
    mFlowerInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

@Override
public int getCount() {
    return MainActivity.flowerArrayFeedList.size();
}

@Override
public Object getItem(int i) {
    return MainActivity.flowerArrayFeedList.size();
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {

    final ViewHolder holder;

    if(view == null){

        view = mFlowerInflater.inflate(R.layout.flower_grid_row, viewGroup, false);

        holder = new ViewHolder();

        holder.name = (TextView) view.findViewById(R.id.mainGridName);

        view.setTag(holder);
        mFlowerFeed = MainActivity.flowerArrayFeedList.get(i);
        mFlowerImage = MainActivity.flowerArrayImageList.get(i);

    }
    else{
        holder = (ViewHolder) view.getTag();
        mFlowerFeed = MainActivity.flowerArrayFeedList.get(i);
        mFlowerImage = MainActivity.flowerArrayImageList.get(i);

    }

    holder.name.setText(mFlowerFeed.get("name"));

    return view;
}

private class ViewHolder {

    TextView name

 }
}

Однако сейчас я пытаюсь реализовать Horizontal ListView.Проведя некоторые исследования, я обнаружил, что «правильный» способ реализации горизонтального ListView - это использование RecyclerView.Это то, что у меня есть в моем MainActivity

CustomFlowerGridViewAdapter customFlowerGridViewAdapter = new CustomFlowerGridViewAdapter(MainActivity.this, flowerArrayFeedList);
    flowersGrid.setAdapter(customFlowerGridViewAdapter);

Проблема заключается в том, что я пытаюсь установить адаптер.

enter image description here

Как мне установить BaseAdapter для RecyclerView?

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Ты не.RecylerViews принимает другой тип адаптера, отличный от того, который используется в ListView.Простой пример адаптера со списком строк:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private String[] mDataset;

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }

   public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        TextView v = (TextView) LayoutInflater.from(parent.getContext())
                .inflate(R.layout.my_text_view, parent, false);
        ...
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }


    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.mTextView.setText(mDataset[position]);

    }


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

Этот можно найти в документах .Поэтому вам необходимо реализовать класс ViewHolder, который будет использоваться вашим адаптером.Вашему адаптеру необходимо расширить RecyclerView.Adapter.

Чтобы установить горизонтальный список, необходимо установить LinearLayourManager в представлении рециркулятора с установленным свойством Horizontal.

LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(layoutManager);
MyAdapter adapter = new MyAdapter(dataset);
recyclerView.setAdapter(adapter);
0 голосов
/ 04 июня 2018

Я нашел очень простое решение.Нет необходимости иметь дело с RecyclerViews

Rotate-Layout-Wrapper

Затем внутри оболочки укажите угол 90.

com.github.rongi.rotate_layout.layout.RotateLayout
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/mainFlowersGridL"
            android:layout_below="@+id/mainFlowersHeading"
            android:layout_width="match_parent"
            android:layout_height="170dp"
            app:angle="90"> <!-- Specify rotate angle here -->

            <GridView
                android:id="@+id/mainFlowersGrid"
                android:layout_below="@+id/mainFlowersHeading"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

            </GridView>
        </com.github.rongi.rotate_layout.layout.RotateLayout>

Затем в вашем XML-файле пользовательского элемента.Укажите формат до -90.

0 голосов
/ 04 июня 2018

ваш CustomFlowerGridViewAdapter должен быть продлен RecyclerView.Adapter.Вам также нужно будет изменить некоторые из ваших методов в вашем адаптере.При RecyclerView макет в виде сетки будет управляться GridLayoutManager, который вы можете установить вне своего адаптера.

...