【发布时间】:2020-07-24 15:07:00
【问题描述】:
我遇到了一个问题,我正在尝试在简单的项目中实现数据绑定,我只使用一个对象做了一个示例,它很简单并且有效,但现在我正在尝试对一个列表执行此操作,它更难,因为我现在正在处理适配器。
所以现在我的 xml 布局在布局标签内,并在定义我想要集成的模型的 xml 中声明了一个变量,我的 activity_main 也在布局标签内
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
>
<data>
<variable
name="contract"
type="com.example.cosysimulation.models.ContractModel" />
</data>
<TextView
android:id="@+id/courtier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="22sp"
android:text="@{contract.courtier}"
android:layout_marginTop="8dp"
android:layout_marginLeft="12dp"
android:layout_toLeftOf="@+id/contratImage"
android:textColor="@color/colorPrimaryDark"></TextView>
</layout>
这是我的活动:
public class MainActivity extends AppCompatActivity {
ContractsListViewModel contractsListViewModel;
@BindView(R.id.contractList)
RecyclerView contractList;
RecyclerView.Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding main = DataBindingUtil.setContentView(this, R.layout.activity_main);
ButterKnife.bind(this);
contractList.setLayoutManager(new LinearLayoutManager(this));
contractsListViewModel = ViewModelProviders.of(this).get(ContractsListViewModel.class);
contractsListViewModel.call();
contractsListViewModel.contractList.observe(this,contractModels -> {
adapter = new ContractListAdapter(MainActivity.this, contractModels);
contractList.setAdapter(adapter);
});
}
}
这是我的适配器:
public class ContractListAdapter extends RecyclerView.Adapter<ContractListAdapter.ContractViewHolder> {
List<ContractModel> contracts;
Context context;
public ContractListAdapter(Context context, List<ContractModel> contracts){
this.context = context;
this.contracts = contracts;
}
@NonNull
@Override
public ContractViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.contrat, parent, false);
return new ContractViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ContractViewHolder holder, int position) {
holder.bind(contracts.get(position));
}
@Override
public int getItemCount() {
return this.contracts.size();
}
public class ContractViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
@BindView(R.id.courtier)
TextView courtier;
@BindView(R.id.contratImage)
ImageView contractImage;
public ContractViewHolder(@NonNull View itemView){
super(itemView);
ButterKnife.bind(this, itemView);
}
public void bind(ContractModel contractModel){
courtier.setText(contractModel.getCourtier());
}
}
}
这是我的合同模型:
公共类 ContractModel {
@SerializedName("courtier")
private String courtier;
public ContractModel(String courtier) {
this.courtier = courtier;
}
public String getCourtier() {
return courtier;
}
public void setCourtier(String courtier) {
this.courtier = courtier;
}
}
任何帮助都将不胜感激,我在 Youtube 上找到的教程主要显示了仅一个对象的绑定,这更容易。
【问题讨论】:
-
您好,您使用的是 ButterKnife 库
-
那么,您确定要改用 DataBinding 库吗?
-
可以显示
ContractModel吗? -
检查编辑,我已经编辑了
-
对不起,我明白了.. 只是以为这是主要布局
标签: android mvvm data-binding retrofit