在活动中显示模型字段信息的最有效方法是什么?就像下面的图片一样,他们是使用View组(LinearLayout,RelativeLayout,ConstraintLayout)手动创建每个字段,还是使用RecyclerView生成这些字段?如果这是使用RecyclerView进行的,那么如何实现?
更新(如果我们使用的是RecyclerView):
-谢谢您的答复,我想你们是对的,如果我想像图片样本中那样实现,我应该使用LinearLayout。但就我而言,我有大量数据,50个字段,并且我不想为每个字段手动创建1个ViewGroup。在我的示例中,我的用户模型将仅使用4个字段,这些项目仅用于查看,没有其他视图类型,也没有特定功能。
用户模型字段:
-名称
-年龄
-性别
-地址
我希望每个用户字段都作为recyclerview中的一个项目,但是由于我的UserModel不是List,因此我无法将其提供给RecyclerView。下面的图片是我想要实现的。抱歉,如果我的问题有点模棱两可,则我很难解释我的问题。
答案 0 :(得分:0)
正如您在评论中向我解释的那样。
如果是这种情况,可以使用 Simple RecyclerView 轻松解决,甚至不使用ViewType
您的ItemView具有徽标,标题和描述。
class ListItem{
int logo;
int title;
int desc;
// write getter and setter
}
从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);
List<ListItem> myList = new List<ListItem>();
myList.add(username);
myList.add(age);
YourAdapter adapter = new Adapter(context,myList);
recyclerView.setAdapter(adapter);
希望这会有所帮助。和平:)
答案 1 :(得分:-1)
我将使用带有自定义适配器的RecyclerView
来实现此结果,具体取决于每个项目的高级程度。如果它是简单的交互和设计,例如icon
,text
甚至是click listener
,那么就足够了。
如果要更高级一些,每个按钮可以执行许多不同类型的操作,那么也许您可以使用LinearLayout
并使用其特定操作来生成每个按钮。
假设您要使用RecyclerView
,那么它可能看起来像这样:
<?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);
}
}
}
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
的附加变量,以便您知道用户单击某个关键字时该怎么做。特定类型。
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);