2024年HarmonyOS鸿蒙最全Android适配器和适配器视图_适配器视图引用(1),HarmonyOS鸿蒙最新面试题

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

    R.id.cheese_name,
    cheeses
);

### 4. 创建列表


要显示可垂直滚动的项目列表,可以使用微件。要将小部件添加到活动中,可以将其拖放到活动的布局 XML 文件中,也可以使用 Java 代码中的构造函数创建小组件。



ListView cheeseList = new ListView(this);



setContentView(cheeseList);


若要将其绑定到我们在上一步中创建的适配器,请调用如下所示的方法。



cheeseList.setAdapter(cheeseAdapter);


如果现在运行应用,则应该能够以列表的形式查看数组的内容。


### 5. 创建网格


要显示可垂直滚动的项目二维网格,可以使用微件。两者都是抽象类的子类,它们有许多相似之处。因此,如果您知道如何使用其中一个,那么您也知道如何使用另一个。


使用类的构造函数创建一个新实例,并将其传递给活动的方法。



GridView cheeseGrid = new GridView(this);
setContentView(cheeseGrid);


若要设置网格中的列数,请调用其方法。我将把它做成一个两列的网格。



cheeseGrid.setNumColumns(2);


通常,您希望使用 、 和 方法来调整列的宽度和之间的间距。请注意,这些方法使用像素作为其单位。setColumnWidth()setVerticalSpacing()setHorizontalSpacing()



cheeseGrid.setColumnWidth(60);
cheeseGrid.setVerticalSpacing(20);
cheeseGrid.setHorizontalSpacing(20);


现在,您可以使用该方法将 绑定到我们之前创建的适配器。



cheeseGrid.setAdapter(cheeseAdapter);`


再次运行应用以查看外观。


### 6. 添加事件侦听器


可以侦听适配器视图中项目的单击和长单击事件。例如,让我们将单击事件侦听器添加到 GridView


创建实现接口的匿名类的新实例,并将其传递给对象的方法。安卓工作室会为接口的方法自动生成一个存根。您会注意到,该方法的参数包含一个整数,用于指定列表项的位置。您可以使用此整数来找出用户单击的数据集中的哪个项目。`AdapterView.OnItemClickListenersetOnItemClickListener()GridViewonItemClick()`


下面的代码演示如何在每次单击 中的项时将简单消息显示为小吃栏。



cheeseGrid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView,
View view, int position, long rowId) {

    // Generate a message based on the position
    String message = "You clicked on " + cheeses[position];

    // Use the message to create a Snackbar
    Snackbar.make(adapterView, message, Snackbar.LENGTH_LONG)
            .show(); // Show the Snackbar
}

});


如果运行应用并单击网格中的任意项目,屏幕底部将显示一条消息。请注意,您可以使用相同的代码来侦听。


### 7. 扩展ArrayAdapter


在它生成的对象的布局中只能处理一个小部件。要拓宽它的功能,你必须扩展它。但是,在我们这样做之前,让我们创建一个稍微复杂的数据集。


假设我们的数据集包含以下类的对象,而不是字符串:



static class Cheese {
String name;
String description;

public Cheese(String name, String description) {
    this.name = name;
    this.description = description;
}

}


这是我们将使用的数据集:



Cheese[] cheeses = {
new Cheese(“Parmesan”, “Hard, granular cheese”),
new Cheese(“Ricotta”, “Italian whey cheese”),
new Cheese(“Fontina”, “Italian cow’s milk cheese”),
new Cheese(“Mozzarella”, “Southern Italian buffalo milk cheese”),
new Cheese(“Cheddar”, “Firm, cow’s milk cheese”),
};


如您所见,该类包含两个字段和 。要在列表或网格中显示这两个字段,项目的布局必须包含两个微件。


创建一个新的布局 XML 文件并将其命名为custom\_item.xml。向其添加“大文本”和“小文本”构件。将第一个小部件的属性设置为cheese\_name将第二个小部件的属性设置为cheese\_description。布局 XML 文件的内容现在应如下所示:



<?xml version="1.0" encoding="utf-8"?>





还必须能够处理两个小部件。重新访问您的活动,创建一个扩展该类的新匿名类,并重写其方法。确保将数组作为参数传递给其构造函数。



ArrayAdapter cheeseAdapter =
new ArrayAdapter(this, 0, cheeses) {
@Override
public View getView(int position,
View convertView,
ViewGroup parent) {

        }
    };

在方法内部,必须将参数用作数组的索引,并在该索引处获取项。getView()position



Cheese currentCheese = cheeses[position];


该方法的第二个参数使我们能够重用对象。如果忽略它,适配器视图的性能将很差。首次调用该方法时, 是 。必须通过扩充指定列表项布局的资源文件来初始化它。为此,请使用该方法获取对 的引用并调用其方法。



// Inflate only once
if(convertView == null) {
convertView = getLayoutInflater()
.inflate(R.layout.custom_item, null, false);
}


此时,您可以使用 来获取对布局内小部件的引用,并调用它们的方法以使用数组中的数据对其进行初始化。



TextView cheeseName =
(TextView)convertView.findViewById(R.id.cheese_name);
TextView cheeseDescription =
(TextView)convertView.findViewById(R.id.cheese_description);

cheeseName.setText(currentCheese.name);
cheeseDescription.setText(currentCheese.description);


最后,返回,以便它可用于填充与适配器关联的任何适配器视图。



![img](https://img-blog.csdnimg.cn/img_convert/5326a90843669bb8b4407c699d96f5ce.png)
![img](https://img-blog.csdnimg.cn/img_convert/725357f8a25564266a0464333924d4a7.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618636735)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

bfLB-1715611893825)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618636735)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值