Android Studio开发App:ListView和RecyclerView的使用

一、Listview的使用

1、ListView的使用

(1)ArrayAdapter适配器

        ArrayAdapter可以通过泛型来指定要适配的数据类型,然后在构造函数中把要适配的数据传入。而且ArrayAdapter有多个构造函数的重载,我们可以根据实际情况选择最合适的一种。例如,我们将希望用ListView展示出来的数据放在一个String类型的数组中,具体如下所示:

String[] data={"菠萝","芒果","石榴"};

为了展示String类型的数据,我们可以创建一个String类型的适配器。具体如下所示:

ArrayAdapter<String> adapter=new ArrayAdapter<>(MainActivity.this,and
roid.R.layout.simple_list_item_1,data);

然后通过setAdapter函数将适配器加载到控件中:

listView.setAdapter(adapter);

(2)点击事件响应

        在实际使用过程中,如果我们想要进一步了解ListView中某一项的内容,我们需要点击了解详情,因此,我们可以给ListView设置一个点击事件响应。具体代码如下所示:

public void onItemClick(AdapterView<?> parent, View view, int i, long
l) {

(3)结果展示

        最终效果如下图所示:

2、定制ListView界面

(1)自定义适配器

        由于我们在实际使用过程中希望使用一些其他的展现方式,例如图文混排,因此我们需要自定义一个适配器FruitAdapter来继承ArrayAdapter。具体代码如下所示:

FruitAdapter adapter=new FruitAdapter(MainActivity.this,R.layout.frui
t_item,fruitlist);

 (2)自定义类

        List泛型中既包括图片又包括文本,因此我们需要自定义一个Fruit类,并将所有我们希望展示的物品属性罗列其中。具体代码如下所示:

public class Fruit {
    private int imageID;
    private String name;
    private String price;
}

(3)inflate方法

        inflate方法用于将子容器控件嵌入到父容器控件中,该方法共有三个参数,第一个参数为自己设计的子容器布局,第二个参数为父容器控件布局,第三个布尔参数值表明是否连接该布局和其父容器控件,在这里情况设置为false,因为系统已经插入了这个布局到父控件,设置为true将会产生多余的一个ViewGroup。具体代码如下所示:

inflate(R.layout.fruit_item,parent,false)

(4)提升ListView运行效率

        目前ListView的运行效率较低,以为在FruitAdapter类的getView方法中,每次都将布局重新加载了一遍,在快速滚动的时候,这将会成为性能的瓶颈,若数据列表中存在大量数据,运行时可能会出现加载时间过长等一系列问题。因此,我们需要使用convertView参数,用于将之前加载好的布局进行缓存,以便之后可以进行使用。具体代码如下所示:

public View getView(int position, @Nullable View convertView, @No
nNull ViewGroup parent) {

除了通过convertView参数来进行缓存,我们还可以通过新增内部类ViewHolder来对控件实例进行缓存。内部类ViewHolder如下所示:

private class ViewHolder {
    ImageView fruitimage;
    TextView fruitname;
    TextView fruitprice;
}

当convertView参数值为nulll时,创建一个ViewHolder对象:

if (convertView==null){
    viewHolder=new ViewHolder();
}

并将控件的实例都存放在ViewHolder中,然后调用View的setTag方法,将对象存储在View中。具体代码如下所示:

view.setTag(viewHolder);

如果convetView不为null,则调用View的getTag方法将ViewHolder重新取出,具体代码如下所示:

else {
    view=convertView;
    viewHolder= (ViewHolder) view.getTag();//重新获取 viewHolder
}

(5)运行结果展示

 2、RecyclerView的使用

        RecyclerView提供了三种布局管理器,即LinearLayoutManager线性布局管理器、StaggeredGridLayoutManager瀑布流管理器、GridLayoutManager网格布局管理器,这三种布局管理器都是通过setLayoutManager方法来设置的。

(1)LinearLayoutManager线性布局管理器

        LinearLayoutManager可以设置横向滚动和纵向滚动,只需通过setOrientation函数设置滚动方向即可。纵向滚动代码如下所示:

layoutManager .setOrientation(RecyclerView.VERTICAL);

运行结果如下所示:

横向滚动代码如下所示:

layoutManager .setOrientation(RecyclerView.HORIZONTAL);

 运行结果如下所示:

 (2)网格布局管理器GridLayoutManager

        我们可以通过GridLayoutManager方法中的第二个参数设置网格的列数,第三个参数设置网格 排列方向:RecyclerView.HORIZONTAL表示横向排列,Recycler.VERTICAL表示纵向排列。具体代码如下所示:

GridLayoutManager layoutManager = new GridLayoutManager(this, 5 ,Recycl
erView.HORIZONTAL,false);

运行效果图如下所示:

 (4)StaggeredGridLayoutManager瀑布流布局

        我们可以通过StaggeredGridLayoutManager方法中的第一个参数来设置瀑布流的列数,通过第二个参数来设置瀑布流的滑动方向:StaggeredGridLayoutManager.VERTICAL表示纵向滚动,StaggeredGridLayoutManager.HORIZONTAL表示横向滚动。具体代码如下所示:

StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutMan
ager( 3 ,StaggeredGridLayoutManager.VERTICAL);

运行效果如下所示:

  • 26
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android Studio开发一个简单的记事本应用,通常涉及到创建一个新的Android项目,然后使用Java或Kotlin作为主要的编程语言。以下是一个简化的步骤和关键代码片段: 1. **初始化项目**: - 创建新项目 -> 选择"Empty Activity"模板 -> 填写项目名称、包名等信息。 2. **添加UI**: - 在`activity_main.xml`布局文件中,创建一个`EditText`用于输入文本,以及一个`RecyclerView`来显示记事本内容(如果想实现列表展示)。 ```xml <EditText android:id="@+id/et_note_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入笔记" /> <ListView android:id="@+id/lv_notes" <!-- 这里假设是ListView,如果是RecyclerView则用rv_notes --> android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. **编写数据模型**: 创建一个`Note`类,包含标题和内容属性。 ```java public class Note { private String title; private String content; // 构造函数、getter/setter等... } ``` 4. **添加记事功能**: - 在`MainActivity.java`或`FragmentActivity.kt`中,处理输入框的`OnEditorActionListener`来保存笔记。 ```java EditText editText = findViewById(R.id.et_note_text); editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { String noteText = editText.getText().toString(); // 这里可以将noteText添加到数据库或列表中 saveNote(noteText); return true; } return false; } }); ``` 5. **加载或显示笔记**: - 如果有存储机制,如SQLite数据库,你需要从数据库中获取笔记,并在适当时刷新`RecyclerView`或`ListView`。 6. **RecyclerView示例**: - 使用`RecyclerView.Adapter`和`RecyclerView.ViewHolder`来管理列表项。 ```java public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.NoteViewHolder> { private List<Note> notes; public NoteAdapter(List<Note> notes) { this.notes = notes; } // 其他方法,如 onCreateViewHolder、 onBindViewHolder 和 getItemCount() static class NoteViewHolder extends RecyclerView.ViewHolder { TextView titleTextView; TextView contentTextView; NoteViewHolder(View itemView) { super(itemView); titleTextView = itemView.findViewById(R.id.tv_note_title); contentTextView = itemView.findViewById(R.id.tv_note_content); } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值