Java 在Android中用作嵌套视图或RecyclerView项视图的自定义视图
我是android新手,但有很好的JavaFX体验。我正在尝试创建一个可以重用的自定义视图,但很难找到正确的方法 在javafx中,我可以通过:创建一个单独的fxml文件来定义自定义视图的布局,然后创建一个链接到fxml文件的控制器类,在这个类中,我有一个方法来检索控制器的数据模型并用它来填充标签,等等 我想要的自定义视图是Java 在Android中用作嵌套视图或RecyclerView项视图的自定义视图,java,android,Java,Android,我是android新手,但有很好的JavaFX体验。我正在尝试创建一个可以重用的自定义视图,但很难找到正确的方法 在javafx中,我可以通过:创建一个单独的fxml文件来定义自定义视图的布局,然后创建一个链接到fxml文件的控制器类,在这个类中,我有一个方法来检索控制器的数据模型并用它来填充标签,等等 我想要的自定义视图是 受约束布局 TextView(约束到右锚定) 圆形文本视图(约束到左锚定) 在安卓系统中实现这一点的最佳方式是什么?另外,是否可以使用回收视图来实现这一点?如果是
- 受约束布局
- TextView(约束到右锚定)
- 圆形文本视图(约束到左锚定)
在安卓系统中实现这一点的最佳方式是什么?另外,是否可以使用回收视图来实现这一点?如果是,如何为每个项目使用自定义视图并设置其数据?问题很广泛。您可能需要更多关于创建视图的研究
- 项目视图中有3个视图-带边距的白色背景(linearlayout?),右文本视图和左文本视图李>
- 左边的文本视图应该在drawables文件夹中定义了android:background=“drawable/round\u shape”和round\u shape.xml。一切都在3个xml文件中完成,main.xml用于recyclerview、item.xml、round_background.xml。然后,使用recyclerview适配器将TextView与数组绑定,并进行recyclerview初始化
public class MyRV extends RecyclerView.Adapter<MyRV.ViewHolder> {
private List<MyModelItemWith2Strings> mDataSet; // You may need to setup an array,
// with 2 String objects - for the right and left textviews
// Use an array of class with 2 elements rather than <String>, e.g. List<MyModelItemWith2Strings>
// pass your model here
// this setData will be used to provide the contents for the textviews
void setData(List< /* set your 2 string class here*/ > dataSet) {
mDataSet = dataSet;
}
static class ViewHolder extends RecyclerView.ViewHolder {
// Here you bind item TV's
// first you declare textviews that you will use to fill with data
// Add any other item views you will need to fill in
public TextView tv;
public TextView tv2;
public ViewHolder(LinearLayout v) {
super(v);
// Bind itemview views here. Put R.id.tv from your itemview.xml
tv = v.findViewById(R.id.....);
tv2 = v...
}
}
// Add your itemview layout here
@Override
public MyRV.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LinearLayout v = (LinearLayout) LayoutInflater.from(parent.getContext())
.inflate(/***R.layout.item_view***/, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder( MyRV.ViewHolder h, int position) {
// get content from your model (the above list) and fill in the the itemview textviews
String a= mDataSet.get(position).getItem1();
String b = mDataSet.get(position). getItem2();
...
h.tv.setText(a);
// set clickers if you want to. The clicker class is below.
h.tv.setOnClickListener(new Click(position));
h.tv2.setText(...)
}
// This is obligatory to pass for your RV to initialize. It won't work if you don' t tell Android how to count your array soze
@Override
public int getItemCount() {
return mDataSet.size();
}
// These are my implementation of clickers. I prefer to put them in the nested class of the adapter.
private class Click implements OnClickListener {
private int pos;
Click(int position) {
pos = position;
}
@Override
public void onClick(View p1) {
// get data from your array on click
mDataSet.get(pos);
// Use pos as position on the array, mData.get(pos)
}
}
}
你的回收商视图中充满了数据问题很广泛。以recyclerview为例,做一些练习。在main.xml中创建一个recyclerview,并使用项目视图创建一个单独的文件。项目视图中有3个视图-带边距的白色背景(linearlayout?),右文本视图和左文本视图。左边的文本视图应该在drawables文件夹中定义了android:background=“drawable/round\u shape”和round\u shape.xml。一切都在3个xml文件中完成,main.xml用于recyclerview、item.xml、round_background.xml。然后,使用recyclerview适配器将TextView与数组绑定,并进行recyclerview初始化。@EugeneKartoyev谢谢,我现在就尝试一下。如果你能在回答中形成这个评论。另外,我将如何将项目模型传递给项目视图。适配器如何知道要使用模型中的哪个字段设置文本的textview。该模型将包含两个字符串,这两个字符串应绑定到右文本视图和左文本视图。啊,我想我应该为这个做一个定制的适配器类,正如我在这里看到的()
RecyclerView rv = (RecyclerView) findViewById(R.id.rv_In_Main_Xml);
// just additional tunings.
rv.setHasFixedSize(true);
rv.setLayoutManager(new LinearLayoutManager(context)); // <- context = this, if you are in the Main activity
MyRV rva = new MyRV();
rva.setData(myArray_with_2_string_objects_to_fill_tvs);
rv.setAdaptor(rva);