android studio布局绑定,Android Studio 3.6 视图绑定ViewBinding(Java例程)

Android Studio 3.6 Canary 11 及更高版本中推出了ViewBinding功能,ViewBinding将逐步替换掉findViewById,还等什么,抓紧时间学习吧!谷歌官方文档的ViewBinding Demo是用Kotlin语言写的,看起来比较生疏,花了点时间,我在Java上实现了类似的代码,还是看Java比较亲切!下面简单介绍下如何使用ViewBinding:

1.将 viewBinding 元素添加到其 build.gradle 文件中,添加完后需要重新sync

// Android Studio 3.6.0

android {

...

viewBinding {

enabled = true

}

}

在 Android Studio 4.0 中,viewBinding 将被变成属性整合到了buildFeatures 选项中,配置要改成:

// Android Studio 4.0

android {

buildFeatures {

viewBinding = true

}

}

2.修改java代码,如果你的布局文件是activity_main.xml,则会生成一个ActivityMainBinding的类,如果你的布局文件是result_profile.xml,则会生成一个ResultProfileBinding的类,以此类推。下面以activity_main.xml及其对应的MainActivity.java为例说明:

假设activity_main.xml放置了三个控件:TextView(Id为text)、Button(Id为button)、ImageView(没有设置Id),其中ImageView因为没有设置Id,因此绑定类中不存在对它的引用,所以在代码中无法被引用。

MainActivity.java的部分代码如下:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// setContentView(R.layout.activity_main);

LayoutInflater layoutInflater = LayoutInflater.from(this);

ActivityMainBinding binding = ActivityMainBinding.inflate(layoutInflater);

setContentView(binding.getRoot());

binding.text.setText("文字已变化");

binding.button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(getApplicationContext(), "Button被点击", Toast.LENGTH_SHORT).show();

}

});

}

注意:原先的setContentView(R.layout.activity_main)需要注释掉,否则会重复设置ContentView。

布局的根视图(activity_main.xml)会自动生成一个名为 rootView 的成员变量。在 Activity 的 onCreate()方法中,要将 rootView传入 setContentView()方法,从而让 Activity 可以使用绑定对象中的布局,rootView是私有变量,需要使用getRoot()方法拿到。

完整的工程欢迎到码云或Github上下载(ViewBindingTest目录):

视图绑定ViewBinding的详细说明请参考:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Android Studio实现商城页面的步骤: 1.创建一个新的Android Studio项目,选择Empty Activity模板。 2.在app/build.gradle文件中添加以下依赖项: ```gradle implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.android.support:cardview-v7:28.0.0' ``` 3.在activity_main.xml文件中添加一个RecyclerView和一个CardView作为列表项的布局。 ```xml <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="8dp"/> <android.support.v7.widget.CardView android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content" app:cardCornerRadius="4dp" app:cardElevation="4dp" app:cardUseCompatPadding="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="8dp"> <ImageView android:id="@+id/image_view" android:layout_width="match_parent" android:layout_height="200dp" android:scaleType="centerCrop"/> <TextView android:id="@+id/text_view_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18sp" android:textStyle="bold"/> <TextView android:id="@+id/text_view_description" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="14sp"/> <TextView android:id="@+id/text_view_price" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18sp" android:textStyle="bold"/> </LinearLayout> </android.support.v7.widget.CardView> ``` 4.创建一个新的Java类作为RecyclerView的适配器,并在其中实现列表项的布局和数据绑定。 ```java public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ProductViewHolder> { private List<Product> productList; public ProductAdapter(List<Product> productList) { this.productList = productList; } @NonNull @Override public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_product, parent, false); return new ProductViewHolder(view); } @Override public void onBindViewHolder(@NonNull ProductViewHolder holder, int position) { Product product = productList.get(position); holder.imageView.setImageResource(product.getImage()); holder.textViewTitle.setText(product.getTitle()); holder.textViewDescription.setText(product.getDescription()); holder.textViewPrice.setText("$" + product.getPrice()); } @Override public int getItemCount() { return productList.size(); } public static class ProductViewHolder extends RecyclerView.ViewHolder { ImageView imageView; TextView textViewTitle; TextView textViewDescription; TextView textViewPrice; public ProductViewHolder(View itemView) { super(itemView); imageView = itemView.findViewById(R.id.image_view); textViewTitle = itemView.findViewById(R.id.text_view_title); textViewDescription = itemView.findViewById(R.id.text_view_description); textViewPrice = itemView.findViewById(R.id.text_view_price); } } } ``` 5.创建一个新的Java类作为产品数据模型,并在其中定义产品的属性。 ```java public class Product { private int image; private String title; private String description; private double price; public Product(int image, String title, String description, double price) { this.image = image; this.title = title; this.description = description; this.price = price; } public int getImage() { return image; } public String getTitle() { return title; } public String getDescription() { return description; } public double getPrice() { return price; } } ``` 6.在MainActivity.java文件中初始化RecyclerView和适配器,并将适配器设置为RecyclerView布局管理器。 ```java public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private ProductAdapter productAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); List<Product> productList = new ArrayList<>(); productList.add(new Product(R.drawable.product1, "Product 1", "Description 1", 9.99)); productList.add(new Product(R.drawable.product2, "Product 2", "Description 2", 19.99)); productList.add(new Product(R.drawable.product3, "Product 3", "Description 3", 29.99)); productList.add(new Product(R.drawable.product4, "Product 4", "Description 4", 39.99)); productList.add(new Product(R.drawable.product5, "Product 5", "Description 5", 49.99)); productAdapter = new ProductAdapter(productList); recyclerView.setAdapter(productAdapter); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值