listView点击置顶操作_listview 如何设置某个item置顶-程序员宅基地

技术标签: android  

这是很久之前学过的内容,学过之后在开发一个wifi连接功能的时候,点击对应item的WiFi进行连接,能连接成功,功能都能实现,但是遇到了前端ui方面的问题,后来没时间就没做了,listView点击item,并且置顶,这个我在博客上面之前很少看到,所以就趁着目前在做测试之余,抽个时间想了一下,怎么实现ListView点击item置顶,好了,废话不多说了,直接上代码:

首先还是布局main_activity.xml,设置一个listView的控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/lv_list_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

既然有了listView的控件了,那么接下来就是listView子项布局了,list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_item"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/tv_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

布局都已经搞定,接下来就是listView的适配器了,这里我们新建一个MyListViewAdapter继承自baseAdapter,重写4个方法,并且使用内部类ViewHolder创建缓存view,加快listView中item的加载速度(个人理解,有不对的地方还请指正)

package com.example.listviewdemo_01;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

/**
 * author:besthyq
 * date:2022/4/11
 */
public class MyListViewAdapter extends BaseAdapter {

    private List<String> data;
    private LayoutInflater inflater;

    public MyListViewAdapter(Context context, List<String> data) {
        this.data = data;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int i) {
        return data.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }



    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder;
        //这里用了缓存数据view,如果view为空,那么就加载布局并且找到item的view,设置标记,
        // 如果不为空,那么直接获取标记
        //不管是否为空,都去设置item的文字内容,并且返回
        if (view == null){
            viewHolder = new ViewHolder();
            //加载布局
            view = inflater.inflate(R.layout.list_item, viewGroup, false);
            //找到item的textView
            viewHolder.textView = view.findViewById(R.id.tv_list);
            view.setTag(viewHolder);
        }else {
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.textView.setText(data.get(i));
        return view;
    }

    private class ViewHolder {
        private TextView textView;
    }
}

重点来了,点击item并将其置顶显示,这里在MainActivity中进行,我们点击item的时候,对List<item>进行更新,使list中的item项与第0项进行交换,然后刷新适配器就ok了

package com.example.listviewdemo_01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private static final String TAG = "MainActivity";

    private ListView listView;//listView
    private MyListViewAdapter myListViewAdapter;//适配器
    private List<String> items;//item集合
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.lv_list_view);

        initData();

        myListViewAdapter = new MyListViewAdapter(this,items);
        listView .setAdapter(myListViewAdapter);
        Log.i(TAG, "onCreate: "+items);
        listView.setOnItemClickListener(this);

    }

    /**
     * 初始化listview的数据item
     */
    private void initData() {
        items = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            items.add("items:" + (i + 1));
        }
    }

    /**
     * item子项点击事件
     * @param adapterView
     * @param view
     * @param i
     * @param l
     */
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        Toast.makeText(MainActivity.this, "点击了第:"+(i+1)+"项",Toast.LENGTH_SHORT).show();
        updateData(0,i);
        Log.i(TAG, "onItemClick: "+items);
        //刷新适配器
        myListViewAdapter.notifyDataSetChanged();
    }

    /**
     * 更新数据,使点击的item置顶
     * @param init
     * @param i
     */
    private void updateData(int init, int i) {
        Collections.swap(items,init,i);
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chirchillhe/article/details/124111734

智能推荐

python bins分箱,划分数值区间_bins=-程序员宅基地

文章浏览阅读4.2k次,点赞4次,收藏12次。a = od.交易时间.apply(lambda x: x.hour)labels = ['上午','午间','下午','夜间','夜间2']bins = [0,6,12,14,18,24]pd.cut(a, bins=bins, labels=labels, right=False)bins:区间labels:标签right:右区间是否为闭_bins=

功放掉电检测电路_功放掉电保护电路-程序员宅基地

文章浏览阅读1.3k次。参考:7206.TPA311x音频功放POP噪声分析及控制.pdf检测功放掉电时,先把shutdown拉低,关闭输出掉电检测电路在应用时需要注意调整 R1 和 R2 的数值,选择合适的掉电保护点。避免电源的纹波触发掉电保护电路导致误触发静音。电路中给出了 Active High 和 Active Low 两种逻辑供用户选择。可以根据功放所需的逻辑自行选用。..._功放掉电保护电路

vue3生成二维码打印_elementplus+vue3实现二维码打印-程序员宅基地

文章浏览阅读539次。3.在此基础上封装业务组件selfQrGoodsPrint。1.在vue3环境中,用到插件qrcodejs2-fix。2.封装基础组件 selfQrcode。_elementplus+vue3实现二维码打印

2021-08-17事件一 事件处理模型(冒泡,捕获)取消冒泡和阻止默认事件 事件对象 事件委托-程序员宅基地

文章浏览阅读79次。1.事件冒泡:结构上(非视觉上)嵌套关系的元素会存在冒泡功能,同一事件,自子元素冒泡向父元素点黄的黄绿红的class全都会显示。点击子元素,一级一级冒泡到父元素。代码:自底向上改变一下位置:视觉上不是嵌套的,但结构上还是嵌套的点击黄色区域:2.事件捕获:先父元素,再子元素(自顶向下)IE没有将false改成true,冒泡直接变获取//红绿黄一定是先捕获后冒泡一个对象的一个事件类型,上面绑定的一个处理函数,只能遵循一个处理模型现在在一个对象的一个事件类型,上面绑定的两.

Dlib的人脸定位和人脸对齐_dlib 检测和对齐图片中的人脸-程序员宅基地

这篇文章介绍了使用Dlib库进行人脸定位和对齐的方法。文章内容涉及到使用Python中的OpenCV和Dlib库来实现人脸定位和对齐的步骤。

ssh -T [email protected] Connection timed out 解决方案-自测有效-程序员宅基地

文章浏览阅读1.3k次,点赞11次,收藏7次。HostName ssh.github.com # 这是最重要的部分。git bash 中vim ~/.ssh/config。修改内容如下:重点第二行:ssh.github.com。

随便推点

ubuntu18.04安装detectron2-程序员宅基地

文章浏览阅读2.4k次。ubuntu18.04安装detectron20、安装搜狗输入法0.1 安装输入法环境fcitx0.2 下载安搜狗输入法0.3 配置输入法1、安装anaconda,参考https://blog.csdn.net/Lucky_yw/article/details/893870732、安装pycharm,参考https://www.jianshu.com/p/b0bc6a45b7c7...

聊聊MySQL架构演进:从主从复制到分库分表_mysql集群主从分库分表-程序员宅基地

文章浏览阅读109次。方案二,采用柔性事务,柔性事务是指,数据库保证局部事务,全局事务实现由业务层实现(如通过调度补偿,重试补偿,人工介入等),柔性事务常见的解决方案有:TCC、利用消息队列实现事务。路由问题,需要业务层根据SQL路由到不同的数据库,路由到SLAVE节点时,还需要保证系统负载均衡。count问题,分表后,如果需要统计表记录总和,需要遍历所有的表,然后再将结果进行汇总,可以通过一张单独的汇总表来解决,但这种解决方案需要每次insert或者delete的时候就需要更新汇总表,如果有一次没有更新,就会导致数据不一致。_mysql集群主从分库分表

win7系统两台电脑之间利用Socket实现文件传输---C++实现-程序员宅基地

文章浏览阅读1.7w次,点赞14次,收藏116次。参考:http://www.jb51.net/article/53732.htm 本博客主要实现了简单win7系统下,两台电脑之间(客户机与服务器)的文件传输,主要是基于Windows网络编程中winsock来实现的,当然这个只是简单的实现,你可以根据你的需求在你的项目里面进行更改。这里主要实现的通过客户机(Client) 通过监听服务器(Server)的需求进而向服...

UDP校验和计算-程序员宅基地

文章浏览阅读5.1w次,点赞19次,收藏145次。目录 一、UDP概述二、UDP数据报三、UDP校验和计算四、UDP校验和计算的C语言实现及抓包验证一、UDP概述UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,UDP在IP报文的协议..._udp校验和

『中级篇』docker之CI/CD持续集成-(终结篇)(77)_docker ci cd-程序员宅基地

文章浏览阅读353次。原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!原文链接地址:『中级篇』docker之CI/CD持续集成-(终结篇)(77)今天是中级终结篇的最后一次了,想想在二个月的时间,每天的坚持学习和更新收获还是满满的,跟我一起学习的小伙伴不知道你收获到了吗?想说的这几次CI/CD介绍了gitlab,gitlab-ci,docker,所有的工具都是免费的,提供了一个方式,作..._docker ci cd

pytorch语义分割计算mIoU_pytorch miou-程序员宅基地

文章浏览阅读5.1k次,点赞7次,收藏34次。版本:python3pred为模型预测的label,像素0表示背景,像素1表示类别1,像素2表示类别2,以此类推。target为groundtruth,这里读入格式为PIL image,格式不一样的请自行修改这里的n_classes是目标物类别数。比如,对于只有背景和一个检测物类别的二分类问题,n_classes=1因为pythonfor循环的range(a,b),范围其实为[a,b),所..._pytorch miou

推荐文章

热门文章

相关标签