搜档网
当前位置:搜档网 › Android中ListView点击和item里面的button或ImageView不能同时生效的解决

Android中ListView点击和item里面的button或ImageView不能同时生效的解决

Android中ListView点击和item里面的button或ImageView不能同时生效的解决
Android中ListView点击和item里面的button或ImageView不能同时生效的解决

Android中ListView点击

ListView的item里面的button或ImageView不能同时生效

的解决方法

研究ListView,首先ListView的适配器类型分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。

ArrayAdapter的构造需要三个参数,依次为this,布局文件(注意这里的布局文件描述的是列表的每一行的布局,https://www.sodocs.net/doc/a718799118.html,yout.simple_list_item_1是系统定义好的布局文件只显示一行文字,数据源(一个List集合)。同时用setAdapter()完成适配的最后工作。

使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。因为系统没有对应的布局文件可用,我们可以自己定义一个布局。下面做适配,new一个SimpleAdapter参数一次是:this,

布局文件,HashMap的title和info,img。布局文件的组件id,title,info,img。布局文件的各组件分别映射到HashMap的各元素上,完成适配。

然后我在使用SimpleAdapter的时候,希望在SimpleAdapter中添加的ImageView图片并且添加点击事件,我通过ID找到这个组件,然后给组件添加单击事件:img.setOnClickListener(new View.OnClickListener(){ @Override

public void onClick(View v){

Toast.makeText(FriendListTwitter. this,"click add friend.",

Toast.LENGTH_SHORT).show();

}

});

但是程序一直出现NullPointerException。

原来以为只要给图片添加clickable和focusable属性就行了,可是还是出现异常时一直出现NullPointerException。后来看到网上一篇文章后才明白,文章的关键内容是:

--------------------------------------->

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

Xml代码

xmlns:android="https://www.sodocs.net/doc/a718799118.html,/apk/res/a ndroid"

android:layout_width="fill_parent" android:layout_height="46dip"

android:descendantFocusability="bloc ksDescendants">

android:layout_wid th="40dip"

android:layout_he ight="40dip"

android:id="@+id/I temImage"/>

android:text="De falut"

android:layout_ width="wrap_content"

android:layout_ height="wrap_content"

android:textSiz e="15dip"

android:textColo r="@drawable/white"

android:layout_ toRightOf="@id/ItemImage"

android:id="@+i d/ItemTitle1"

android:layout_g ravity="center_vertical"

android:layout_

alignParentTop="true"/>

android:text="De falut"

android:layout_w idth="wrap_content"

android:layout_ height="wrap_content"

android:textSize ="15dip"

android:textCol or="@drawable/black"

android:layout_ toRightOf="@id/ItemImage"

android:id="@+id /ItemTitle2"

android:layout_ gravity="center_vertical"

android:layout_

alignParentBottom="true"/>

android:src=" @drawable/btn_check_on"

android:layou t_width="wrap_content"

android:layout _height="wrap_content"

android:click able="true"

android:focus able="false"

android:layou t_alignParentRight="true"

android:layout _centerVertical="true"

android:layou t_marginRight="10dip"/>

Java代码

import java.io.BufferedInputStream; import java.io.InputStream;

import https://www.sodocs.net/doc/a718799118.html,.URL;

import https://www.sodocs.net/doc/a718799118.html,.URLConnection;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory; import android.os.Bundle;

import android.util.Log;

import https://www.sodocs.net/doc/a718799118.html,youtInflater; import android.view.View;

import android.view.ViewGroup;

import android.view.Window;

import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;

import

android.widget.AdapterView.OnItemClickListener; public class FriendListTwitter extends Activity{

private List> mListItem;

private ListView mListView;

@Override

public void onCreate(Bundle savedInstanceState){

this.requestWindowFea ture(Window.FEATURE_NO_TITLE);

super.onCreate(savedIn stanceState);

setContentView(https://www.sodocs.net/doc/a718799118.html,yout. apl_mb_c1_friend_001_01);

mListView=(ListView) findViewById(R.id.friends);

mListItem=getData();

MyAdapter adapter=new MyAdapter(this);

mListView.setAdapter(a dapter);

//添加点击

mListView.setOnItemCli ckListener(new OnItemClickListener(){

@Override

public void onItemClick(AdapterViewarg0,View arg1,int arg2,

long arg3) {

startActivity(new Intent(FriendListTwitter.this,

FriendDetail.class));

}

});

}

private List>getData(){ List>list=new

ArrayList>();

for(int i=0;i<10;i++){

HashMapmap=new HashMap();

String url=

"http://10.167.12.184:8080/examples/images/1.png";

Bitmap bitmap=getImageByURL(url);

map.put("avatar",bitmap);//图像资源的ID

map.put("username","@username"+i);

map.put("location","SuZhou JiangSu China");

map.put("add",R.drawable.btn_check_on);

list.add(map);

}

return list;

}

/**

*listview中点击按键弹出对话框

*/

public void showInfo(){

Toast.makeText(this,"add user",

Toast.LENGTH_SHORT).show();

}

public Bitmap getImageByURL(String url){ try{

URL imgURL=new URL(url);

URLConnection conn=imgURL.openConnection();

conn.connect();

InputStream is=conn.getInputStream();

BufferedInputStream bis=new BufferedInputStream(is);

Bitmap bm=BitmapFactory.decodeStream(bis);

bis.close();

is.close();

if(bm==null){

Log.e("MO","httperror");

}

return bm;

}catch(Exception e){

return null;

}

}

public final class ViewHolder{

public ImageView avatar;

public TextView username;

public TextView location;

public ImageView add;

}

public class MyAdapter extends BaseAdapter{ private LayoutInflater mInflater;

public MyAdapter(Context context){

this.mInflater=LayoutInflater.from(context);

}

@Override

public int getCount(){

return mListItem.size();

}

@Override

public Object getItem(int arg0){

return null;

}

@Override

public long getItemId(int arg0){

return0;

}

@Override

public View getView(int position,View convertView, ViewGroup parent){

ViewHolder holder=null;

if(convertView==null){

holder=new ViewHolder();

convertView=mInflater.inflate(

https://www.sodocs.net/doc/a718799118.html,yout.apl_mb_c1_friend_001_03,null);

holder.avatar=(ImageView)convertView

.findViewById(R.id.ItemImage);

https://www.sodocs.net/doc/a718799118.html,ername=(TextView)convertView

.findViewById(R.id.ItemTitle1);

holder.location=(TextView)convertView

.findViewById(R.id.ItemTitle2);

holder.add=(ImageView)

convertView.findViewById(R.id.add);

convertView.setTag(holder);

}else{

holder=(ViewHolder)convertView.getTag();

}

holder.avatar.setImageBitmap((Bitmap) mListItem.get(position).get(

"avatar"));

Log.e("txl01",

mListItem.get(position).get("avatar").toString());

https://www.sodocs.net/doc/a718799118.html,ername.setText((String)

mListItem.get(position).get(

"username"));

holder.location.setText((String)

mListItem.get(position).get(

"location"));

holder.add.setBackgroundResource((Integer) mListItem.get(position)

.get("add"));

holder.add.setOnClickListener(new

View.OnClickListener(){

@Override

public void onClick(View v){

showInfo();

}

});

return convertView;

}

}

}

下面将对上述代码,做详细的解释,listView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到listView的长度(这也是为什么在开始的第一张图特别的标出列表长度),然后根据这个长度,调用getView()逐一绘制每一行。如果你的getCount()返回值是0的话,列表将不显示同样return1,就只显示一行。

系统显示列表时,首先实例化一个适配器(这里将实例化自定义的适配器)。当手动完成适配时,必须手动映射数据,这需要重写getView()方法。系统在绘制列表的每一行的时候将调用此方法。getView()有三个参数,position 表示将显示的是第几行,covertView是从布局文件中inflate来的布局。我们用LayoutInflater的方法将定义好的vlist2.xml文件提取成View实例用来显示。然后将xml 文件中的各个组件实例化(简单的findViewById()方法)。这样便可以将数据对应到各个组件上了。但是按钮为了响应点击事件,需要为它添加点击监听器,这样就能捕获点击事

件。至此一个自定义的listView就完成了,现在让我们回过头从新审视这个过程。系统要绘制ListView了,他首先获得要绘制的这个列表的长度,然后开始绘制第一行,怎么绘制呢?调用getView()函数。在这个函数里面首先获得一个View(实际上是一个ViewGroup),然后再实例并设置各个组件,显示之。好了,绘制完这一行了。那再绘制下一行,直到绘完为止。在实际的运行过程中会发现listView 的每一行没有焦点了,这是因为Button抢夺了listView的焦点,只要布局文件中将Button设置为没有焦点就OK了。

另外,通过这种方法不可以将ListView和ImageView同时添加了监听,通过网上搜索,原来是没有在xml中添加部分属性,在list的配置xml的根节点添加属性

android:descendantFocusability="blocksDescendants",还有就是在要添加事件的控件上添加

android:focusable="false",上边的代码中我已经添加过了

android 自定义圆角头像以及使用declare-styleable进行配置属性解析

android 自定义圆角头像以及使用declare-styleable进行配置属性解析由于最新项目中正在检查UI是否与效果图匹配,结果关于联系人模块给的默认图片是四角稍带弧度的圆角,而我们截取的图片是正方形的,现在要给应用统一替换。应用中既用到大圆角头像(即整个头像是圆的)又用到四角稍带弧度的圆角头像,封装一下以便重用。以下直接见代码 [java] view plain copy 在CODE上查看代码片派生到我的代码片 package com.test.demo; import com.test.demo.R; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Shader.TileMode; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Parcelable; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; import android.widget.ImageView; /** * 圆角imageview */ public class RoundImageView extends ImageView { private static final String TAG = "RoundImageView"; /** * 图片的类型,圆形or圆角 */ private int type; public static final int TYPE_CIRCLE = 0; public static final int TYPE_ROUND = 1; /** * 圆角大小的默认值

建筑疏散宽度计算

建筑-疏散宽度计算

————————————————————————————————作者: ————————————————————————————————日期: ?

来自防火规范-2015版 5.5.18 除本规范另有规定外,公共建筑内疏散门和安全出口的净宽度不应小于0.90m,疏散走道和疏散楼梯的净宽度不应小于1.10m。 高层公共建筑内楼梯间的首层疏散门、首层疏散外门、疏散走道和疏散楼梯的最小净宽度应符合表5.5.18的规定。 表5.5.18 高层公共建筑内楼梯间的首层疏散门、首层疏散外门、疏散走道和疏散 楼梯的最小净宽度(m) 建筑类别楼梯间的首层疏散门、首层疏散外门 走道 疏散楼梯单面布房双面布房 高层医疗建筑 1.30 1.40 1.50 1.30 其他高层公共建筑 1.20 1.30 1.40 1.20 5.5.19 人员密集的公共场所、观众厅的疏散门不应设置门槛,其净宽度不应小于1.40m,且紧靠门口内外各1.40m范围内不应设置踏步。 人员密集的公共场所的室外疏散通道的净宽度不应小于3.00m,并应直接通向宽敞地带。??5.5.20 剧场、电影院、礼堂、体育馆等场所的疏散走道、疏散楼梯、疏散门、安全出口的各自总净宽度,应符合下列规定:?1观众厅内疏散走道的净宽度应按每100 人不小于0.60m计算,且不应小于1.00m;边走道的净宽度不宜小于0.80m。 布置疏散走道时,横走道之间的座位排数不宜超过20排;纵走道之间的座位数:剧场、电影院、礼堂等,每排不宜超过22个;体育馆,每排不宜超过26个;前后排座椅的排距不小于0.90m时,可增加1.0倍,但不得超过50个;仅一侧有纵走道时,座位数应减少一半。?2剧场、电影院、礼堂等场所供观众疏散的所有内门、外门、楼梯和走道的各自总净宽度,应根据疏散人数按每100人的最小疏散净宽度不小于表5.5.20-1的规定计算确定。 表5.5.20-1 剧场、电影院、礼堂等场所每100人所需最小疏散净宽度(m/百人) 观众厅座位数(座)≤2500≤1200 耐火等级一、二级三级 疏散部位门和走道平坡地面?阶梯地面 0.65 0.75 0.85?1.00 楼梯0.75 1.00 3 体育馆供观众疏散的所有内门、外门、楼梯和走道的各自总净宽度,应根据疏散人数按每100人的最小疏散净宽度不小于表5.5.20-2的规定计算确定。 表5.5.20-2 体育馆每100人所需最小疏散净宽度(m/百人) 观众厅座位数范围(座)3000~50005001~10000 10001~20000疏散部位门和走道平坡地面0.43 0.37 0.32

HTML字体属性

HTML字体属性 一、文字样式设置的基本标签— 设置字体样式的基本标签是,被其包含的文本为样式作用区。在初学者的HTML代码编写中,容易被多重嵌套,如文本。还有一种情况是标签嵌套错位,如文本 。为了规范代码的编写,避免不必要的错误,读者在初学时一定要谨慎。 二、设置文字的颜色 color是标签的属性之一,用于设置文字颜色。编写代码如代码2.1所示。 代码2.1 字体颜色的设置:font_color.htm 字体颜色的设置 浅红色文字:HTML学习的本质就是该是什么就用什么
深红色文字:HTML学习的本质就是该是什么就用什么
浅绿色文字:HTML学习的本质就是该是什么就用什么
深绿色文字:HTML学习的本质就是该是什么就用什么
浅蓝色文字:HTML学习的本质就是该是什么就用什么
深蓝色文字:HTML学习的本质就是该是什么就用什么
浅黄色文字:HTML学习的本质就是该是什么就用什么
深黄色文字:HTML学习的本质就是该是什么就用什么
浅青色文字:HTML学习的本质就是该是什么就用什么
深青色文字:HTML学习的本质就是该是什么就用什么
浅紫色文字:HTML学习的本质就是该是什么就用什么
深紫色文字:HTML学习的本质就是该是什么就用什么
浏览效果如图2.2所示。

Android平台我的日记设计文档

Android平台我的日记 设计文档 项目名称:mydiray 项目结构示意: 阶段任务名称(一)布局的设计 开始时间: 结束时间: 设计者: 梁凌旭 一、本次任务完成的功能 1、各控件的显示 二、最终功能及效果 三、涉及知识点介绍 四、代码设计 activity_main.xml:

android:layout_centerHorizontal="true" android:layout_marginTop="88dp" android:text="@string/wo" android:textSize="35sp"/>