自定义listview,带按钮,多选框,处理item事件

Qt自定义控件开发:实现带搜索功能的下拉多选框 在桌面应用开发中,下拉框(ComboBox)和复选框(CheckBox)是基础控件,用于用户从列表中选择选项。其核心原理是通过模型/视图架构管理数据与界面分离,提升代码可维护性。该技术的工程价值在于能显著优化用户交互体验,尤其是在处理大量选项时,通过集成搜索过滤功能,用户可以快速定位目标,避免手动滚动查找,极大提升操作效率。典型的应用场景包括管理系统中的多选字段,如员工信息管理中的部门选择、数据筛选面板等。本文以Qt框架为例,详细讲解如何基于QComboBox和QListView,结合QSortFilter 阅读详情

产品中要用到这个效果:listitem中带多选框,用来删除;有按钮,处理相应事件;item的click处理跳转。同事说这个设计操作起来很二,有点反社会,再加个图片和可以展开就反人类了。不管怎样,产品说了,我们就得做。

思路:item上有控件,就不能使item失去焦点,因此,各种button,checkbox就不能去获取焦点,但是可以click。其实主要就这些,其他也没多少东西。

1、首先贴个效果图,全选/取消全选,删除,item的单击,checkbox的单击,button的单击:

2、代码部分:

MainActivity.java

package com.ttdevs.lcb;

import java.util.LinkedList;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.ttdevs.lcb.CustomAdapter.ViewHolder;

public class MainActivity extends Activity implements OnClickListener, OnItemClickListener,
		OnRefreshListener2<ListView> {

	private LinkedList<ItemInfo> list;
	private CustomAdapter adapter;

	private PullToRefreshListView mPullRefreshListView;
	private ListView actualListView;
	
	private CheckBox cbSelectAll ;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		cbSelectAll = (CheckBox) findViewById(R.id.cbSelectAll);
		
		
		mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);
		mPullRefreshListView.setMode(Mode.BOTH);
		mPullRefreshListView.setOnRefreshListener(this);
		
		actualListView = mPullRefreshListView.getRefreshableView();
		// Need to use the Actual ListView when registering for Context Menu
		registerForContextMenu(actualListView);

		list = new LinkedList<ItemInfo>();
		adapter = new CustomAdapter(getApplicationContext(), list);
		
		initData(list);
		
		actualListView.setAdapter(adapter);
		actualListView.setOnItemClickListener(this);
	}

	private void initData(LinkedList<ItemInfo> list) {
		for (int i = 0; i <= 20; i++) {
			ItemInfo info = new ItemInfo();
			info.setId(i);
			info.setContent("这是第 " + i + " 条记录");
			list.add(info);
			adapter.getSelect().add(false);
			info = null;
		}
	}

	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		ViewHolder holder = adapter.new ViewHolder();
		holder.tvItemID = (TextView) view.findViewById(R.id.tvItemID);
		holder.tvContent = (TextView) view.findViewById(R.id.tvContent);
		// holder.cbSelect = (CheckBox) view.findViewById(R.id.cbSelect);
		// holder.btClick = (Button) view.findViewById(R.id.btClick);

		ItemInfo itemInfo = list.get(position);
		itemInfo.setId(Integer.parseInt(holder.tvItemID.getText().toString()));
		itemInfo.setContent(holder.tvContent.getText().toString());

		Intent intent = new Intent(this, InfoActivity.class);
		intent.putExtra("itemInfo", itemInfo);
		startActivity(intent);

	}

	@Override
	public void onClick(View view) {
		switch (view.getId()) {
		case R.id.btDelete:
			for (int i = 0; i < adapter.getSelect().size(); ) {
				System.out.println(i+"|" + adapter.getSelect().get(i));
				if(adapter.getSelect().get(i)){
					adapter.getSelect().remove(i);
					list.remove(i);
				} else {
					i++;
				}
			}
			adapter.notifyDataSetChanged();
			cbSelectAll.setChecked(false);
			break;
		case R.id.cbSelectAll:
			boolean flag = cbSelectAll.isChecked();
			for (int i = 0; i < adapter.getSelect().size(); i++) {
				adapter.getSelect().set(i, flag);
			}
			adapter.notifyDataSetChanged();
			break;

		default:
			break;
		}
		
	}
	
	@Override
	public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
		Toast.makeText(getApplicationContext(), "下拉刷新", Toast.LENGTH_LONG).show();
		new GetLastTask().execute();
	}

	@Override
	public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
		Toast.makeText(getApplicationContext(), "上拉获取更多", Toast.LENGTH_LONG).show();
		new GetFirstTask().execute();
	}

	private class GetFirstTask extends AsyncTask<Void, Void, ItemInfo> {

		@Override
		protected ItemInfo doInBackground(Void... params) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			ItemInfo info = new ItemInfo();
			info.setId((int) (System.currentTimeMillis() % 1000000));
			info.setContent("last:" + String.valueOf(System.currentTimeMillis()));
			return info;
		}

		@Override
		protected void onPostExecute(ItemInfo result) {
			list.addLast(result);
			adapter.getSelect().addLast(false);
			adapter.notifyDataSetChanged();
			// TODO 二选一?
			mPullRefreshListView.onRefreshComplete();

			super.onPostExecute(result);
		}
	}

	private class GetLastTask extends AsyncTask<Void, Void, ItemInfo> {

		@Override
		protected ItemInfo doInBackground(Void... params) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			ItemInfo info = new ItemInfo();
			info.setId((int) (System.currentTimeMillis() % 1000000));
			info.setContent("last:" + String.valueOf(System.currentTimeMillis()));
			return info;
		}

		@Override
		protected void onPostExecute(ItemInfo result) {
			list.addFirst(result);
			adapter.getSelect().addFirst(false);
			adapter.notifyDataSetChanged();

			mPullRefreshListView.onRefreshComplete();

			super.onPostExecute(result);
		}
	}
}
CustomAdapter.java,这个是自定义的adapter,实现主要的逻辑:
package com.ttdevs.lcb;

import java.util.LinkedList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;

public class CustomAdapter extends BaseAdapter {

	private final LinkedList<Boolean> selected = new LinkedList<Boolean>();

	private Context context;
	private LayoutInflater inflater;
	private LinkedList<ItemInfo> list;

	public CustomAdapter(Context context, LinkedList<ItemInfo> list) {
		this.context = context;
		this.inflater = LayoutInflater.from(context);
		this.list = list;
	}

	public LinkedList<Boolean> getSelect() {
		return selected;
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		ViewHolder holder = null;
		if (convertView == null) {
			convertView = inflater.inflate(R.layout.listview_item, null);

			holder = new ViewHolder();
			holder.cbSelect = (CheckBox) convertView.findViewById(R.id.cbSelect);
			holder.tvContent = (TextView) convertView.findViewById(R.id.tvContent);
			holder.tvItemID = (TextView) convertView.findViewById(R.id.tvItemID);
			holder.btClick = (Button) convertView.findViewById(R.id.btClick);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		final ItemInfo itemInfo = list.get(position);
		holder.tvItemID.setText(String.valueOf(itemInfo.getId()));
		holder.tvContent.setText(itemInfo.getContent());

		holder.cbSelect.setChecked(selected.get(position));
		holder.cbSelect.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				System.out.println("selected set position:" + position);
				selected.set(position, !selected.get(position));// 将CheckBox的选中状况记录下来
				for (int i = 0; i < selected.size(); i++) {
					System.out.println("selected " + i + ":" + selected.get(i));
				}

				// notifyDataSetChanged();
			}
		});
		holder.btClick.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				String value = String.valueOf(position) + "|" + itemInfo.getId() + "|" + itemInfo.getContent();
				Toast.makeText(context, value, Toast.LENGTH_SHORT).show();
			}
		});

		return convertView;
	}

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

	@Override
	public Object getItem(int position) {
		return list.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}
	
	public class ViewHolder {
		public CheckBox cbSelect;
		public TextView tvContent;
		public TextView tvItemID;
		public Button btClick;
	}
}

ItemInfo.java,一个传递数据的实体类:

package com.ttdevs.lcb;

import java.io.Serializable;

public class ItemInfo implements Serializable {

	private static final long serialVersionUID = 6287420905418813028L;
	
	private int id;
	private String content;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}
}
跳转结果页,看自己的业务了:
package com.ttdevs.lcb;

import android.app.Activity;
import android.os.Bundle;

public class InfoActivity extends Activity {

	private ItemInfo info;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_info);

		// intent.putExtra("itemInfo", itemInfo);
		info = (ItemInfo) getIntent().getExtras().get("itemInfo");
		
		System.out.println(info.getId() + "||" + info.getContent());
	}
}

布局文件:

activity_main.xml

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

    <LinearLayout
        android:id="@+id/llSelectAll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:orientation="vertical" >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:orientation="horizontal" >

            <CheckBox
                android:id="@+id/cbSelectAll"
                android:layout_width="28dp"
                android:layout_height="28dp"
                android:onClick="onClick"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="8dp"
                android:layout_toRightOf="@+id/cbSelectAll"
                android:text="全选" />

            <Button
                android:id="@+id/btDelete"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:onClick="onClick"
                android:text="delete" />
        </RelativeLayout>

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:background="@android:color/holo_blue_dark" />
    </LinearLayout>

    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/pull_refresh_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/llSelectAll"
        android:cacheColorHint="#00000000"
        android:divider="#19000000"
        android:dividerHeight="4dp"
        android:fadingEdge="none"
        android:fastScrollEnabled="false"
        android:footerDividersEnabled="false"
        android:headerDividersEnabled="false"
        android:smoothScrollbar="true" />

</RelativeLayout>
listview的item,注意两个属性:clickable和focusable

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minHeight="30dip"
    android:paddingLeft="6dp"
    android:paddingRight="6dp"
    android:paddingTop="4dp" >

    <CheckBox
        android:id="@+id/cbSelect"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:clickable="true"
        android:focusable="false" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_toLeftOf="@+id/btClick"
        android:layout_toRightOf="@+id/cbSelect"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/tvContent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@android:color/black"
            android:text="content" />

        <TextView
            android:id="@+id/tvItemID"
            android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="id" />
    </LinearLayout>

    <Button
        android:id="@+id/btClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:clickable="true"
        android:focusable="false"
        android:text="click" />

</RelativeLayout>

3、这里用到了一个下拉刷新的第三方库 com.handmark.pulltorefresh.library,这个在github上有的:

Demo:下载

Pulltorefresh:csdn下载,github下载

先导入pulltorefresh library,然后再运行demo

4、有很多改进的地方,欢迎吐槽




Qt自定义控件:实现带搜索功能的下拉多选框(MultiSelectComboBox) 在桌面应用开发中,下拉框(ComboBox)是基础控件,用于参数配置和数据筛选。其核心原理是基于模型-视图(Model-View)架构,将数据与界面分离。标准QComboBox在需要多选和快速定位的场景下存在局限,技术价值在于通过扩展原生控件来提升用户体验和操作效率。应用场景广泛,如数据可视化配置、任务标签管理和CRM系统中的批量筛选。本文通过实现一个集成了复选框和搜索过滤的MultiSelectComboBox控件,解决了**多选**和**搜索**的痛点,详细介绍了利用QStandardItemModel 阅读详情

相关推荐

Qt自定义控件开发:实现带搜索过滤的多选下拉框(MultiSelectComboBox)

在桌面应用开发中,下拉框(ComboBox)是基础控件,但标准下拉框在多选和大量选项场景下存在操作效率低、查找困难等痛点。基于Qt的模型/视图(Model/View)框架,开发者可以通过组合QListView、QLineEdit和QCheckBox,构建支持多选和实时搜索的复合控件。其核心原理是利用QAbstractListModel管理数据与选中状态,通过QSortFilterProxyModel实现动态过滤,从而提升用户交互效率。这种自定义控件在数据筛选、配置管理等需要从大量选项中进行多项选择的场景中具

weixin_34268169的博客 421

鸿蒙listitem和tabcontent+页面传参

写Second.ets。写Index.ets。如何运行:右上角眼睛。

weixin_53386534的博客 724

listview 实现多按钮操作

listview 上有两个按钮 一个编辑文本 一个按钮为加 一个为减 编辑文本为只读 触发按钮事件 文本相应变化

项目使用中listview多选或者说是PullToRefreshListView多选的个人解决方案

近期将会陆续分享、总结做过的项目中遇到的技术点,以便下次用到的时候可以快速的实现相关的功能~下面介绍的是我在项目当中碰到的listview多选或者说是PullToRefreshListView(我目前用的上拉刷新,下拉加载更多的数据加载框架)的多选。我相信很多人都会碰到多选的问题,一般item都会有CheckBox控件。另外也可以使用CheckedTextView控件(类CheckedTextVie

abfo12 1278

listview添加图片按钮 及按钮跟ListView双监听

实现了ListView添加图片、按钮并添加了ListView跟Button 的双监听,Button实现的是Activity的跳转

ESP32-BLE学习1-建立简单的server

start 学习之前,我想尝试使用ESP32的demo建立一个简单的server与手机接进行最基本的数据通信。 这里有BLE的简单讲解BLE资料 因为BLE的连接是具有主从机特性的,就像SPI,USB一些请求只能由主机端发起,连接也需要主机端发起。所以手机要想连上ESP32,就得将ESP32设置为从机模式。 从资料上可以看到,从机端通过Notify通知主机,所以从机就是GATT Server。 在进行ESP32 的demo学习之前,得大体看下ESP32的蓝牙组成,ESP32支持经典蓝牙和低功耗蓝牙4.2,

Spark的博客 1845

PullToRefreshListView listview 单选多选

本文讲解如何实现PullToRefreshListView的多选,实现全选,取消全选功能. 同样也适用于普通的listview。 PullToRefreshListView与普通的listview的区别是:PullToRefreshListView在显示页面上,第一个可见的item的position是从 1开始的,因为PullToRefreshListView是拥有头布局的; listvi

sinstar1的博客 904

MuJoCo新手必看:5分钟搞定你的第一个机器人仿真(附Python代码)

本文为零基础新手提供了一份详尽的MuJoCo物理仿真引擎入门指南。从环境搭建、MJCF模型文件解析,到编写Python控制代码,手把手教你5分钟内创建并运行第一个机器人仿真。内容涵盖双摆模型控制与自定义四轮小车构建,帮助你快速掌握这一高性能开源工具,迈出机器人学与强化学习仿真的第一步。

weixin_29032489的博客 656

listView中如何加入button或者ImageView

今天做listView困惑了好久,开始一直是不能点击,只能显示,发现: convertView = LayoutInflater.from(context).inflate(R.layout.setting_net1, null); 原来我setting_net1用了ScrollLayout,肯定是不行的了,所以用LinearLayout。

feiyangxiaomi的专栏 1万+

计算机视觉——SIFT特征匹配

文章目录一、SIFT特征检测原理1.1基本思想1.2二、SIFT特征检测图片兴趣点三、SIFT特征检测描述子匹配四、输入图片检测与之 一、SIFT特征检测原理 1.1基本思想 1.2 二、SIFT特征检测图片兴趣点 代码: 检测结果: 三、SIFT特征检测描述子匹配 四、输入图片检测与之 ...

weixin_43869874的博客 3856

GPS数据处理必备:IGS精密星历下载与使用全攻略(附武汉大学/CDDIS/CODE/GFZ地址)

本文为GPS/GNSS数据处理者提供了IGS精密星历的完整下载与使用指南。详细解析了最终、快速、超快速三种精密星历产品的区别与选择策略,并手把手教学如何从武汉大学、CDDIS、CODE、GFZ四大主流数据中心高效获取数据,涵盖文件命名规则解析及自动化下载脚本,助力科研与工程应用。

weixin_29234239的博客 684

Listview的自定义Adapter

网上关于这方面的好的文章:http://yilee.info/android-diy-listview.html http://blog.youkuaiyun.com/xiaominghimi/article/details/6314704 http://blog.youkuaiyun.com/chenzheng_java/article/details/6202586# 或许你可能有疑问,不是安卓为我

betterAndroider的博客 460

【数据集】基于ubESTARFM法的100m 地温LST数据集(澳大利亚)

【数据集】基于ubESTARFM法的100m 地温LST数据集(澳大利亚)

WW、forever的博客 266

ListView 初步了解

ListView 一、上节回顾: (一)、三大表单控件中需要记忆的核心方法: 1、RadioButton: RadioGroup类中的getCheckedRadioButtonId() 2、CheckBox: CheckBox类中的 isChecked ()CheckBox类中的setChecked() 3、Spinne

ElevenDGQ的博客 922

Response Instance 详解:在 ABAP OData Client Proxy 中读懂每一次响应

ABAP OData Client Proxy中的Response Instance是关键信息载体,封装了业务数据及调用上下文(如分页、delta link等)。响应实例在执行请求后自动生成,根据请求类型返回特定接口(如READ返回/IWBEP/IF_CP_RESPONSE_READ)。响应抽象与OData版本解耦,支持统一处理V2/V4服务。常见响应类型包括单实体读取、列表读取(支持分页和增量同步)、创建/更新/删除响应等。开发时可通过响应对象的安全类型方法获取数据,如get_business_data获

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 138

让 RAP 弹窗参数真正变成必填:Excel Upload Action 的两种实现路径

摘要 在RAP应用中,action弹窗参数经常缺乏必填校验,导致用户体验差。本文提出两种解决方案:1)在action实现中手动校验,简单但交互不流畅;2)通过root abstract entity和abstract BDEF建模,利用field(mandatory)实现框架级校验,推荐此长期方案。后者将约束集中到模型层,使UI与执行期校验一致,特别适合ABAP Cloud环境。以Excel导入为例,强制填写备注和明确选择试运行,可避免审计问题,提升系统可靠性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 200

android—ListView与RecyclerView滑动显示和隐藏浮动按钮(1)

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。同时我还搜集整理2020年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含。但是如果你仅仅是看一遍,而不去学习和深究。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

2401_84009317的博客 958

如何设置反馈点

前面的POWER DC仿真都是忽略反馈线进行的仿真,如果单板压降不过,电源会自动调整输出电压,来满足负载的得到额定的电压.可以看到因为设置了反馈点,源端电压就被抬高到满足压降的值了。仿真上也可以自己添加反馈点,以得到抬高后的电源输出电压值。同样以下图的CPU的Core电源为例。按照流程正常设置好参数。

weixin_54787054的博客 1148

12 Android ListView

四、ListView 1、ListView是Android中使用非常广泛的一种组件,它以垂直列表的形式显示信息,使用它可以用来显示我们常见的列表形式。继承自抽象类AdapterView. 2、ListView是显示内容的地方,Adapter规定显示内容的样式,DataSource提供数据源。减少了编写复杂显示样式的代码。 3、 ListView_仅是作为容器〈列表),用于装载显示数据(就是上面的一个个的红色框的内容,也称为item)。item中的具体数据是由适配器(adapter)来提供的。 4、适配器(a

qq_45796170的博客 202

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

第二章:Android res下的资源文件(3)

4.ListView ListView是Android中使用非常广泛的一种组件,它以垂直列表的形式显示信息,使用它可以用来显示我们常见的列表形式。继承自抽象类AdapterView。 基本原理:ListView是显示内容的地方,Adapter规定显示内容的样式,DataSource提供数据源。减少了编写复杂样式的代码。 ListView仅是作为容器(列表),用于装载显示数据(就是以上黄框,也称为item)。item中的具体数据是由适配器(adapter)来提供的。 适配器(adapter):作为View(

weixin_45805627的博客 164

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

c#软件开发学习笔记--Winform窗体(控件)

构造函数 → Load事件 → 显示 → 用户交互 → FormClosing → 关闭。

Z599817841的博客 241

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

含按钮的ListView

最近老用到ListView,这个会了,其他的就更没问题了,图片异步加载的以后再说哈。 列表的显示需要三个元素: 1.ListVeiw 用来展示列表的View。 2.适配器 用来把数据映射到ListView上的中介。 3.数据 具体的将被映射的字符串,图片,或者基本组件。 用SimpleAdapter实现的话上面的按钮是无法映射的,即使你成功的用布局文件显示出了按钮也无法添加按钮的响...

836811384 241

带按钮的listview

布局<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:lay

S_ubs的博客 754

有按钮的ListView

有按钮的ListView 但是有时候,列表不光会用来做显示用,我们同样可以在在上面添加按钮。添加按钮首先要写一个有按钮的xml文件,然后自然会想到用上面的方法定义一个适配器,然后将数据映射到布局文件上。但是事实并非这样,因为按钮是无法映射的,即使你成功的用布局文件显示出了按钮也无法添加按钮的响应,这时就要研究一下ListView是如何现实的了,而且必须要重写一个类继承BaseAdapter。下面...

weixin_30545285的博客 170

listview的item中单多选实现

最近做一个项目需要实现listview的item单选效果,一开始很自然的想到在布局文件中加RadioButton,然后在适配器里控制它的选中状态。在开发的过程中,却是遇到意想不到的问题:RadioButton的事件跟item的点击事件冲突,在百度上始终没有找到完美的解决方案,搞了大半天还是没解决。后来隐约记得apidemo里有类似的效果,于是找到它的源码布局文件研究,原来它使用的是CheckedT

805
上一篇: 犯了一个菜鸟必备的很郁闷的错误:for循环删除LinkedList集合中元素
下一篇: android SQLite数据库使用总结之(一)从加载本地数据库开始
ttdevs
博客等级 码龄15年 388粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值