У меня есть регулярный RecyclerView
адаптер, который выглядит следующим образом:Использование адаптера для двух различных ситуаций
public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder> {
private static final String TAG = "MessageAdapter";
private Context context;
private List<Message> messages;
public MessageAdapter(Context context, List<Message> messages) {
this.context = context;
this.messages = messages;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public Message message;
public TextView messageUser, messageText, messageTime;
public ViewHolder(View v) {
super(v);
messageUser = (TextView) v.findViewById(R.id.messageUser);
messageText = (TextView) v.findViewById(R.id.messageText);
messageTime = (TextView) v.findViewById(R.id.messageTime);
}
public void setMessage(Message message) {
this.message = message;
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.message_layout, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
Message message = messages.get(position);
holder.setMessage(message);
holder.messageUser.setText(message.getUser());
holder.messageText.setText(message.getText());
holder.messageTime.setText(message.getTime());
}
@Override
public int getItemCount() {
return messages.size();
}
}
Я использую этот адаптер, чтобы перечислить все сообщения пользователя получил в основной деятельности.
В дополнение к этому, я использую AndroidTreeView library в другой части моего приложения, которое также отображает сообщения пользователя (но в макете дерева).
Однако чтение документации этой библиотеки, он говорит, что для того, чтобы создать адаптер для данных TreeView, он должен иметь следующий формат (взятый из документации):
public class MyHolder extends TreeNode.BaseNodeViewHolder<IconTreeItem> {
...
@Override
public View createNodeView(TreeNode node, IconTreeItem value) {
final LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(R.layout.layout_profile_node, null, false);
TextView tvValue = (TextView) view.findViewById(R.id.node_value);
tvValue.setText(value.text);
return view;
}
...
public static class IconTreeItem {
public int icon;
public String text;
}
}
Так я создал второй адаптер сообщения (в частности, для библиотеки AndroidTreeView), который выглядит следующим образом:
public class MessageTreeAdapter extends TreeNode.BaseNodeViewHolder<MessageTreeAdapter.TreeItem> {
private TextView messageUser;
private TextView messageText;
private TextView messageTime;
public MessageTreeAdapter(Context context) {
super(context);
}
@Override
public View createNodeView(TreeNode node, TreeItem value) {
final LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(R.layout.message_layout, null, false);
Message message = value.message;
messageUser = (TextView) v.findViewById(R.id.messageUser);
messageText = (TextView) v.findViewById(R.id.messageText);
messageTime = (TextView) v.findViewById(R.id.messageTime);
messageUser.setText(message.getUser());
messageText.setText(message.getText());
messageTime.setText(message.getTime());
return view;
}
public static class TreeItem {
public Message message;
public TreeItem(Message message) {
this.message = message;
}
}
}
Но как вы можете видеть, я повторяю, что у меня уже есть в моем первом адаптере, MessageAdapter.java
. Я хочу избежать этого.
Итак, мой вопрос: как я могу использовать один адаптер (MessageAdapter.java
) для обеих ситуаций, так что мне не нужно повторять код.
woah, все шло хорошо, а затем взорвалось в беспорядок. Используя общепринятую стандартную практику чтения, держите адаптер для выполнения своих заданий и держателей. Другими словами, ваш код может быть перегруппирован для просмотра классов, а в java, интерфейсе и повторном использовании гораздо более практичным. просто много диссекции. – user7568042