Ich habe eine benutzerdefinierte Ansicht, die ich in zwei verschiedenen Adaptern verwenden kann.Verwenden einer benutzerdefinierten Ansicht in mehreren Adaptern
Hier ist das Layout der benutzerdefinierten Ansicht (custom_view.xml
):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/container">
<ImageView
android:id="@+id/imageView"
android:layout_height="100dp"
android:layout_width="100dp" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
Hier ist die Klasse der benutzerdefinierten Ansicht (CustomView.java
):
public class CustomView extends RelativeLayout {
private final String TAG = "CustomView";
private User user;
private RelativeLayout container;
private ImageView imageView;
private TextView textView;
public CustomView(Context context) {
super(context);
init();
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CustomView(Context context, AttributeSet attrs, User user) {
super(context, attrs);
this.user = user;
init();
}
public CustomView(Context context, User user) {
super(context);
this.user = user;
init();
}
private void init() {
inflate(getContext(), R.layout.custom_view, this);
container = (RelativeLayout) findViewById(R.id.container);
avatar = (ImageView) findViewById(R.id.imaveView);
displayName = (TextView) findViewById(R.id.textView);
// Add the user profile picture to the imageView
Glide.with(getContext())
.load("http://www.website.com/img/users/" + user.getId() + "/avatar.png")
.into(imageView);
// Set the user username in the textView
textView.setText(user.getUsername());
}
}
Nun, ich brauche die benutzerdefinierte Ansicht in zwei verschiedenen verwenden Adapter.
Die erste Adapter Ich brauche die benutzerdefinierte Ansicht zu verwenden, in einem regulären RecyclerView
Adapter ist, die wie folgt aussieht derzeit:
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private static final String TAG = "CustomAdapter";
private Context context;
private List<User> userData;
public CustomAdapter(Context context, List<User> userData) {
this.context = context;
this.userData = userData;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View v) {
super(v);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// TODO: WHAT DO I PUT HERE?
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
// TODO: WHAT DO I PUT HERE?
}
@Override
public int getItemCount() {
return userData.size();
}
}
Wie kann ich die benutzerdefinierte Ansicht in dieser Klasse aufblasen und wie kann ich die binden userData
dazu?
Der zweite Adapter, den ich verwenden muss, ist ein Adapter für die AndroidTreeView library.
Hier ist mein Adapter (bisher) für die AndroidTreeView Bibliothek:
public class CustomTreeAdapter extends TreeNode.BaseNodeViewHolder<CustomTreeAdapter.TreeItem> {
public CustomTreeAdapter(Context context) {
super(context);
}
@Override
public View createNodeView(TreeNode node, TreeItem value) {
// TODO: WHAT DO I PUT HERE?
}
public static class TreeItem {
// TODO: WHAT DO I PUT HERE?
}
}
Als Referenz ist hier der integration documentation für die AndroidTreeView Bibliothek.
Was sollte ich in die obigen Methoden eingeben?
Danke.
Ich habe bereits meinen gesamten Textansichtstext in der benutzerdefinierten Ansichtsklasse eingestellt, daher macht es keinen Sinn, 'setText()' erneut im ViewHolder zu machen. – l890456
Aber ich dachte, ViewHolder ist, wo Sie die Ansichten für Ihr Element/Zeile festlegen sollen? –
Doet 'setText()' zweimal, einmal in jedem Adapter, macht keinen Sinn, wenn ich es einmal in der benutzerdefinierten Ansicht Klasse tun kann. – l890456