Java 在多个适配器中使用自定义视图

Java 在多个适配器中使用自定义视图,java,android,android-layout,android-recyclerview,android-adapter,Java,Android,Android Layout,Android Recyclerview,Android Adapter,我有一个自定义视图,需要能够在两个不同的适配器中使用 这是自定义视图的布局(custom\u view.xml): 现在,我需要在两个不同的适配器中使用自定义视图 我需要在中使用自定义视图的第一个适配器是一个常规的RecyclerView适配器,它当前的外观如下: public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> { private static final St

我有一个自定义视图,需要能够在两个不同的适配器中使用

这是自定义视图的布局(
custom\u view.xml
):

现在,我需要在两个不同的适配器中使用自定义视图

我需要在中使用自定义视图的第一个适配器是一个常规的
RecyclerView
适配器,它当前的外观如下:

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();
    }
}
以下是AndroidTreeView库的参考

我应该在上面的方法中添加什么


谢谢。

对于RecyclerView,在您的onCreateViewHolder()中,我会放以下内容:

@覆盖
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View View=LayoutFlater.from(parent.getContext()).flate(R.layout.custom_视图,parent,false);
返回新的CustomViewHolder(视图);
}
然后,要将userData中的数据绑定到您的ViewHolder,请将其设置为onBindViewHolder():

当然,这意味着您需要先在ViewHolder中找到TextView:

class CustomViewHolder extends RecyclerView.ViewHolder {
    TextView textView;

    CustomViewHolder(View v) {
        super(v);
        textView = (TextView) v.findViewById(R.id.textView);
    }
}

至少我认为这是使用RecyclerView和ViewHolder的方法,我认为您可能希望将CustomView类中的代码(如init()移到ViewHolder中。

我已经在custom view类中设置了所有textview文本,所以对我来说执行
setText()没有意义
再次出现在ViewHolder中。但我认为ViewHolder是您应该为项目/行设置视图的地方?在每个适配器中执行两次
setText()
,如果我可以在自定义视图类中执行一次,则没有意义。我不明白您试图完成什么;你能把它弄清楚一点吗?我有一个自定义视图,在那里我设置了所有的数据。我想在两个不同的适配器中使用这个自定义视图(如上所示)。我该怎么做?
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();
    }
}
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?
    }
}
@Override
public void onBindViewHolder(CustomViewHolder holder, int position) {
    holder.textView.setText(userData.get(position).getName());
}
class CustomViewHolder extends RecyclerView.ViewHolder {
    TextView textView;

    CustomViewHolder(View v) {
        super(v);
        textView = (TextView) v.findViewById(R.id.textView);
    }
}