Самый эффективный способ показать детали в Android - PullRequest
0 голосов
/ 08 ноября 2018

Каков наиболее эффективный способ отображения информации о поле модели в упражнении? Например, как показано на рисунке ниже, они вручную создают каждое поле, используя группы представлений (LinearLayout, RelativeLayout, ConstraintLayout), или они создают это с помощью RecyclerView? Если это было сделано с помощью RecyclerView, как это достижимо?

image

ОБНОВЛЕНИЕ (если мы используем RecyclerView):
-Спасибо за ответы, я думаю, что вы, ребята, правы, я должен использовать LinearLayout, если я хочу достичь, как на картинке. Но в моем случае у меня много данных, 50 полей, и я не хочу вручную создавать 1 ViewGroup для каждого поля. В моем примере я бы использовал только 4 поля для моей пользовательской модели, и эти элементы предназначены исключительно для просмотра, без других типов просмотра и без специальных функций.

Поля модели пользователя:
-Name
-Возраст
-Пол
-Адрес

Я хочу, чтобы каждое пользовательское поле было элементом в представлении реселлера, но поскольку моя UserModel не является списком, я не смог бы передать его в RecyclerView. Ниже картина того, чего я хочу достичь. Извините, если моя проблема немного двусмысленна, мне трудно объяснить мою проблему.

I want to achieve

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Как вы объяснили мне в комментариях.

  • У вас есть модель класса USER, которая имеет 50 полей.
  • А если элементы выглядят так, как они есть на скриншоте.

Если это так, то его легко решить с помощью Simple RecyclerView , даже не используя ViewType

Ваш ItemView имеет логотип, заголовок и описание.

1) Создать новую модель для элементов списка.

class ListItem{

   int logo;
   int title;
   int desc;

   // write getter and setter

}

2) Заполнить список?

Получить данные из User Модель и преобразовать их в ListItem Модель
Допустим, первым элементом является Имя пользователя.
Делай как это

 ListItem username = new ListItem();
   username.setTitle("NAME");
   username .setLogo(R.id.userLogo);
   username.setDesc(user.name);

Допустим, вторым элементом является возраст пользователя.

Делай как это

 ListItem age = new ListItem();
   age.setTitle("AGE");
   username .setLogo(R.id.ageLogo);
   username.setDesc(user.age);

3) Поток itemList в адаптере

List<ListItem> myList = new List<ListItem>();
myList.add(username);
myList.add(age);

YourAdapter adapter = new Adapter(context,myList);
recyclerView.setAdapter(adapter);

Надеюсь, это поможет. Мир:)

0 голосов
/ 08 ноября 2018

Я бы использовал RecyclerView с настраиваемым адаптером для достижения этого результата, в зависимости от того, насколько продвинутым может быть каждый элемент. Если это простое взаимодействие и дизайн, например, icon, text и, возможно, click listener, то этого достаточно.

Если это что-то более продвинутое, много разных типов действий, которые могут быть выполнены каждой кнопкой, то, возможно, вы могли бы просто пойти с LinearLayout и сгенерировать каждую кнопку с их определенным действием.

Если вы хотите сгенерировать кнопки, прокрутите вниз до примера

Предполагая, что вы хотите использовать RecyclerView, тогда это может выглядеть примерно так:

У вас может быть элемент адаптера, похожий на этот:

enter image description here

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="@dimen/padding_view_small">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="25dp"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/ic_person_black_24dp"/>

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:text="@string/placeholder"
        android:textColor="@color/black"
        android:layout_marginStart="@dimen/padding_view_small"
        android:layout_marginLeft="@dimen/padding_view_small"/>

</LinearLayout>

Ваш адаптер

public class MyAdapter extends RecyclerView.Adapter
{
    private Context _context;

    private List<MyObject> _items;

    public void setItems(List<MyObject> items)
    {
        this._items = items;
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
    {
        _context = parent.getContext();
        return new MyAdapter.ItemViewHolder(parent);
    }

    @Override
    public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position)
    {
        final MyAdapter.ItemViewHolder viewHolder = (MyAdapter.ItemViewHolder) holder;
        final MyObject item = _items.get(position);

        viewHolder._icon.setImageResource(item.getIcon());
        viewHolder._name.setText(item.getText());
    }

    @Override
    public int getItemCount()
    {
        return _items != null ? _items.size() : 0;
    }

    private static class ItemViewHolder extends RecyclerView.ViewHolder
    {
        private ImageView _icon;
        private TextView _text;

        private ItemViewHolder(ViewGroup parent)
        {
            super(LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_layout, parent, false));
            this._icon = itemView.findViewById(R.id.icon);
            this._text = itemView.findViewById(R.id.text);
        }
    }
}

Класс MyObject для хранения информации о каждой кнопке

public class MyObject
{
    private int _icon;
    private String _text;

    public MyObject(int icon, String text)
    {
        this._icon = icon;
        this._text = text;
    }

    public int getIcon()
    {
        return this._icon;
    }

    public int getText()
    {
        return this._text;
    }
}

Тогда вы можете также напрямую передать ClickListener в MyObject или добавить дополнительную переменную с именем Type, чтобы вы знали, что делать, когда пользователь нажимает на определенный тип.

Создание кнопок без RecyclerView

Вы можете иметь базовый LinearLayout держатель вида, который будет содержать все виды.

<LinearLayout
    android:id="@+id/action_holder"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"/>

Способ генерации просмотров

private View generateView(int icon, String text)
{
    LayoutInflater inflater = LayoutInflater.from(_context);
    View view = inflater.inflate(R.layout.adapter_layout, null);

    ImageView icon = view.findViewById(R.id.icon);
    icon.setImageResource(icon);

    TextView text = view.findViewById(R.id.text);
    text.setText(text);

    return view;
}

Динамическое добавление новых видов

View showDialogView = generateView(ContextCompat.getDrawable(_context, R.drawable.test), "Show dialog");
//Here you can set a click listener to what should happen when you click the item
showDialogView.setOnClickListener....

linearLayout.addView(showDialogView);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...