android 关于listview convertview的一些问题,求解!

图片说明
做的是一个聊天界面,这是adapter代码。
运行时只能输入一次,输第二次时,参数convertview是第二次view的对象,不知道为什么啊。

 package com.example.chattest;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class ChatActivity extends Activity implements OnClickListener {
    private Button btnSend;
    private ListView lvChat;
    private EditText etSendContent;
    //聊天内容的适配器
    private ChatMsgViewAdapter chatMsgAdapter;
    //聊天内容
    private List<ChatMsgInfo> chatMsgDataArrays = new ArrayList<ChatMsgInfo>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //不显示标题栏
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
        setContentView(R.layout.chat);
        initView();
        initData();
    }

    //初始化视图
    private void initView() {
        lvChat = (ListView) findViewById(R.id.chat_listview);
        btnSend = (Button) findViewById(R.id.btn_send);
        btnSend.setOnClickListener(this);
        etSendContent = (EditText) findViewById(R.id.et_sendmessage); 
    }


    //聊天数据
    //private final static int COUNT = 10
    private String text = new String("第1种写法果然最慢,第二种写法由于用了StringBuffer,快了很多。奇怪的是"
            + "第4种写法竟然也很快,比用StringBuffer还快,怎么回事?其实慢,第二种写"
            + "法由于用了StringBuffer,快了很多。奇怪的是第4种写法竟然也很快,比用StringBuffer还快,怎"
            + "比用StringBuffer还快,怎么回事?其r还快,怎么回事?其回事?其如果你调试过字符串连接的执行过程就会知");
    private String date = new String("2016-3-10 18:11");

    //初始化数据
    private void initData() {
        ChatMsgInfo msgExample = new ChatMsgInfo("XiaoMing", date, text, true);
        chatMsgDataArrays.add(msgExample);
        chatMsgAdapter = new ChatMsgViewAdapter(this, chatMsgDataArrays);
        //listview绑定adapter
        lvChat.setAdapter(chatMsgAdapter);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()) {
        case R.id.btn_send:
            send();
            break;
        }
    }

    //发送按钮的响应函数
    private void send() {
        //获取输入文本框内容
        String sendContent = etSendContent.getText().toString(); 
        if (sendContent.length() > 0) {
            ChatMsgInfo msg = new ChatMsgInfo("XiaoHong", getDate(), sendContent, false);
            chatMsgDataArrays.add(msg);
            //通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容。
            Log.d("chattest", "after setchanged!");
            chatMsgAdapter.notifyDataSetChanged();
            etSendContent.setText("");
            //定位到最后一行
            Log.d("chattest", "after setSelection!");
            lvChat.setSelection(lvChat.getCount() -1 );
        }
    }


    //获取时间
    private String getDate() {
        Calendar c = Calendar.getInstance();
        String year = String.valueOf(c.get(Calendar.YEAR));
        String month = String.valueOf(c.get(Calendar.MONTH));
        String day = String.valueOf(c.get(Calendar.DAY_OF_MONTH) + 1);
        String hour = String.valueOf(c.get(Calendar.HOUR_OF_DAY));
        String mins = String.valueOf(c.get(Calendar.MINUTE));
        StringBuffer buffer = new StringBuffer();
        buffer.append(year + "-" + month + "-" + day + " " + hour + ":" + mins);
        return buffer.toString();
    }
}
 package com.example.chattest;

import java.util.List;

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

public class ChatMsgViewAdapter extends BaseAdapter {
    private static final int TYPE_COM_MSG = 0;
    private static final int TYPE_TO_MSG = 1;
    //private static final int TAG_KEY_ITEM_TYPE = 0;
    //private static final int TAG_KEY_VIEWHOLDER = 1;

    private List<ChatMsgInfo> data;//数据list
    private LayoutInflater myInflater;//layout convert view对象
    private Context context;//环境

    //构造
    public ChatMsgViewAdapter(Context context, List<ChatMsgInfo> data) {
        this.context = context;
        this.data = data;
        myInflater = LayoutInflater.from(context);
    }

    @Override
    public int getItemViewType(int position) {
        // TODO Auto-generated method stub
        ChatMsgInfo msg = data.get(position);
        if (msg.getMsgType()) {
            return TYPE_COM_MSG;
        } else {
            return TYPE_TO_MSG;
        }
    }

    @Override
    public int getViewTypeCount() {
        // TODO Auto-generated method stub
        return 2;
    }

    //获取ListView的个数
    @Override
    public int getCount() {
        return data.size();
    }

    //获取项
    @Override
    public Object getItem(int position) {
        return data.get(position);
    }

    //获取项的id
    @Override
    public long getItemId(int position) {
        return position;
    }

    //获取view
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ChatMsgInfo chatMsg = data.get(position);//聊天数据
        boolean isComMsg = chatMsg.getMsgType();//数据类型(发送、接收)
        LeftItemViewHolder leftViewHolder = null;
        RightItemViewHolder rightViewHolder = null;
        int viewType = getItemViewType(position);
        System.out.println(position + " " + convertView);

        if (convertView == null || ((Integer)convertView.getTag(R.id.tag_item_viewtype)) != viewType) {
            //区分消息类别,展示不同的界面
            if (viewType == TYPE_COM_MSG) {
                convertView = myInflater.inflate(R.layout.chat_msg_text_left_item, null);
                leftViewHolder = new LeftItemViewHolder();
                leftViewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime);
                leftViewHolder.tvUserName = (TextView) convertView.findViewById(R.id.tv_username);
                leftViewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent);
                leftViewHolder.isComMsg = isComMsg;
                convertView.setTag(R.id.tag_item_viewholder, leftViewHolder);
            } else {
                convertView = myInflater.inflate(R.layout.chat_msg_text_right_item, null);
                rightViewHolder = new RightItemViewHolder();
                rightViewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime);
                rightViewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent);
                rightViewHolder.isComMsg = isComMsg;
                convertView.setTag(R.id.tag_item_viewtype, rightViewHolder);
            }
            convertView.setTag(R.id.tag_item_viewtype, viewType);

        } else {
            if (viewType == TYPE_COM_MSG) {
                leftViewHolder = (LeftItemViewHolder) convertView.getTag(R.id.tag_item_viewholder);
            } else {
                rightViewHolder = (RightItemViewHolder) convertView.getTag(R.id.tag_item_viewholder);
            }
        }

        if (viewType == TYPE_COM_MSG) {
            leftViewHolder.tvUserName.setText(chatMsg.getName());
            leftViewHolder.tvSendTime.setText(chatMsg.getDate());
            leftViewHolder.tvContent.setText(chatMsg.getText());
        } else {
            rightViewHolder.tvSendTime.setText(chatMsg.getDate());
            rightViewHolder.tvContent.setText(chatMsg.getText());
        }

        System.out.println(position + " " + convertView);
        return convertView;

    }

    //保存项,显示项的内容
    static class LeftItemViewHolder {
        public TextView tvSendTime;
        public TextView tvUserName;
        public TextView tvContent;
        public boolean isComMsg = true;
    }

    static class RightItemViewHolder {
        public TextView tvSendTime;
        public TextView tvContent;
        public boolean isComMsg = true;
    }
}

5个回答

这种问题,一般都是出在适配器上面,你是不是代码贴错了

这种问题,一般都是出在适配器上面,你是不是代码贴错了

把这句删了试试 ?
convertView.setTag(R.id.tag_item_viewtype, viewType);

xkenqq
xkenqq 为什么我看到的很多例子,复用convert都没有类型判断啊,难道不需要吗?
3 年多之前 回复
xkenqq
xkenqq
3 年多之前 回复
xkenqq
xkenqq 为什么要删除这句话
3 年多之前 回复

这句什么意思?『运行时只能输入一次,输第二次时,参数convertview是第二次view的对象』是没复用的意思吗?前两次当然不会复用
前面都setTag了,还要这句干嘛?『convertView.setTag(R.id.tag_item_viewtype, viewType);』删掉

if (convertView == null || ((Integer)convertView.getTag(R.id.tag_item_viewtype)) != viewType) {
//区分消息类别,展示不同的界面
if (viewType == TYPE_COM_MSG) {
convertView = myInflater.inflate(R.layout.chat_msg_text_left_item, null);
leftViewHolder = new LeftItemViewHolder();
leftViewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime);
leftViewHolder.tvUserName = (TextView) convertView.findViewById(R.id.tv_username);
leftViewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent);
leftViewHolder.isComMsg = isComMsg;
convertView.setTag(R.id.tag_item_viewholder, leftViewHolder);
} else {
convertView = myInflater.inflate(R.layout.chat_msg_text_right_item, null);
rightViewHolder = new RightItemViewHolder();
rightViewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime);
rightViewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent);
rightViewHolder.isComMsg = isComMsg;
convertView.setTag(R.id.tag_item_viewtype, rightViewHolder);
}
convertView.setTag(R.id.tag_item_viewtype, viewType);

                    这里的最后一句删掉
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于ListView使用ConvertView和ViewHolder实现性能优化
listView如果item非常多的时候,可以使用ConvertView和ViewHolder来提高效率。Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; i
ListView优化之一:重用convertView
【ListView优化方式有多种多样,而我们本文作为ListView优化系列文章的第一篇文章,欢迎大家持续关注ListView优化系列文章并关注Jimy的博客。有误的地方,希望大家能多多指正。】 ListView优化之一:重用convertView 重用convertVIew,很大程度上减少了Android设备内存的消耗。 (通过判断convertView是否为null,是的话就需要产生一个
listView的convertView复用引发的问题解决
import java.util.List; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.Context; import android.content.DialogInterface; import android.view.LayoutInflat
关于listview的一些问题??
初学会用listview,但是还有很多不明白,请各位高手指教!rn1、怎样用一个命令按钮使listview的各条记录都被选中,即"全选",用什么属性?rn2、在listview中怎样实现点击表头字段就自动进行排序??rn3、在listview中显示的是查询的结果,我现在想把listview中选中的结果再导出,应该用什么方法啊,是否有vbchecked的属性啊//
关于listview的一些问题
如何做到当鼠标滑过一些选项后让其放大,并有渐变的效果,比如一个listview里的几个选项,鼠标滑过这些选项的时候,选项放大,鼠标离开后就变回原来的样子,放大和缩小都有渐变效果,这些具体思路是怎么样子的,请大家指点下
[求解]关于IP的一些问题
今天我帮人家设置网络rnrn一台IP设置为172.16.2.67,子掩码为255.255.248.0,默认网关为172.16.1.2rnrn终端没有开放DHCP功能全部要手动分配IPrnrn这台机器只要IP的最后一位不设置为67(172.16.2.67)就无法连接外网,访问内网没问题rnrn另一台电脑的IP随便怎么设置都可以访问外网rnrn为何开始那台电脑的IP不设置为172.16.2.67就无法连接外网?请知道的朋友讲解下,谢谢~
关于CMS的一些问题,求解。
[code=html]rn rn <jcms:site.name/>-<jcms:site.page.description/>rn rn rn rn rn rn rn rn rn rnrnrnrnq rn rn rn rn rn rn rn rn rn rn rn 推荐图文rn 最新视频rn rn rn rn rn rn rn<#foreach> <#if test="$equals(i,1)">rn rn rn $cutstring(field.title,38)rn rn<#else>rn rn rn $cutstring(field.title,38)rn rn<#/if> <#/foreach>rn rn rn rn rn rn rn <#foreach>rn rn $cutstring(field.title,38)rn<#/foreach> rn rn rn [/code]rnrnrnrnrn代码只是一部分。rn设计界面是这个样子:[img=https://img-bbs.csdn.net/upload/201310/13/1381643006_808075.jpg][/img]rnrnrnrn几个问题:1.老师说这个cms使用了标识符,请问标识符在.net里面是怎么用的?或者推荐看什么资料。rn2.这段代码里面是怎么解决数据库连接问题的?(我是小白,刚开始学.Net)rnrn
关于DXperience的一些问题,求解
最近在研究DXperience但是没有什么成果,下面是其中一个窗体的设计代码:rnrn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn Likern Equalsrn Containsrn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rnrn rn rn rnrn rn rn rn rn rn rn rn rn rn rn rn rn rn rnrnrn其中的节点不知道是什么意思,还有每个节点中的属性应该如何应用,麻烦哪位大侠帮忙讲解一下
Android ListView问题,求解
在用ListView过程中,遇到了这个问题。。。rn[img=https://img-bbs.csdn.net/upload/201405/11/1399786654_972861.jpg][/img]rn我查了一下ListView运行机制:rn[color=#FF0000]在一个完整的ListView第一次出现时,每个Item都是Null的,getView的时候会跑到需要inflate一个Item的代码段,假设整个view只能最多显示10个item,那么当滑动到第11个Item的时候,第一个item会放入“recycler”,如果第11个Item和放入“Recycler”的item的view一致,那么就会使用"Recycler"里面的Item来显示,从而不用再重复inflate一次,这样大大节省了创建View的工作,在需要显示大量数据时显得尤为重要。[/color]rn[b]程序开始是可以运行的,当我下滑到底后,反向上滑,加载前面的view时出现这个错误。[/b]rn这是我程序的代码:rnjavarn[code=java]package com.kingtime.buytogether.widget;rnrnimport java.util.List;rnrnimport com.kingtime.buytogether.AppContext;rnimport com.kingtime.buytogether.R;rnimport com.kingtime.buytogether.bean.ChatRecord;rnimport com.kingtime.buytogether.bean.User;rnrnimport android.content.Context;rnimport android.view.LayoutInflater;rnimport android.view.View;rnimport android.view.ViewGroup;rnimport android.widget.BaseAdapter;rnimport android.widget.ImageView;rnimport android.widget.TextView;rnrnpublic class ChatMsgAdapter extends BaseAdapter rnrn private int[] imgs = R.drawable.face, R.drawable.widget_dface ;rnrn public static interface IMsgViewType rn int IMVT_COM_MSG = 0;// 别人的消息rn int IMNT_TO_MSG = 1;// 自己的消息rn rn rn private static final int ITEMCOUNT = 2;rn private List recordLsit;rn private Context context;rn private LayoutInflater mInflater;rnrn public ChatMsgAdapter(Context context, List recordList) rn this.recordLsit = recordList;rn this.context = context;rn mInflater = LayoutInflater.from(context);rn rnrn @Overridern public int getCount() rn return recordLsit.size();rn rnrn @Overridern public Object getItem(int position) rn return recordLsit.get(position);rn rnrn @Overridern public long getItemId(int position) rn return position;rn rnrn @Overridern public View getView(int position, View convertView, ViewGroup parent) rn ChatRecord record = recordLsit.get(position);rn AppContext aContext = (AppContext) context;rn User user = aContext.getLoginInfo();rn boolean isComMsg = (record.getUid() == user.getUid()) ? false: true;rn rn ViewHolder viewHolder = null;rn if(convertView == null)rn if(isComMsg)rn convertView = mInflater.inflate(R.layout.chat_text_left_item,null);rn rn elsern convertView = mInflater.inflate(R.layout.chat_text_right_item, null);rn rn rn viewHolder = new ViewHolder();rn viewHolder.tvSendTime = (TextView)convertView.findViewById(R.id.tv_sendtime);rn viewHolder.tvUserName = (TextView)convertView.findViewById(R.id.tv_username);rn viewHolder.tvContent = (TextView)convertView.findViewById(R.id.tv_chatcontent);rn viewHolder.icon = (ImageView)convertView.findViewById(R.id.iv_userhead);rn viewHolder.isComMsg = isComMsg;rn rn elsern viewHolder = (ViewHolder)convertView.getTag();rn rn System.out.println("NOW--LOADING--" + record.getChatId() + ",AND LIST--NUM--IS:" + recordLsit.size());rn System.out.println("RECORD_TIME:" + record.getChatTime());rn viewHolder.tvSendTime.setText(record.getChatTime());rn System.out.println(record.getChatTime());rn viewHolder.tvContent.setText(record.getContent());rn System.out.println(record.getContent());rn viewHolder.tvUserName.setText(String.valueOf(record.getUid()));//Todorn System.out.println(record.getUid());rn viewHolder.icon.setImageResource(imgs[0]);rn System.out.println("ChatRecord Load OK!!!");rn return convertView;rn rnrn static class ViewHolder rn public TextView tvSendTime;rn public TextView tvUserName;rn public TextView tvContent;rn public ImageView icon;rn public boolean isComMsg = true;rn rnrnrn[/code]rnrnxmlrn[code=html]rnrn rn rn rn rn rnrn rnrn rnrn rn rnrn[/code]rn各位大神,求解呀,弄了好久了。。。
Android ListView求解
listview的OnItemSelectedListener事件不能触发,但是Click事件可以触发是什么原因。rn布局文件rnrnrnrnrnjava源代码rn ListView mainlist=(ListView)findViewById(R.id.mainlist);rnrn mainlist.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);rnrn String[] arr1="第一栏","第二栏","第三栏","第四栏","第五栏";rn ArrayAdapter adapter1=new ArrayAdapter(this,R.layout.layout_app_setting_listitem,arr1);rnmainlist.setAdapter(adapter1);rnrnmainlist.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() rn @Overridern public void onItemSelected(AdapterView parent, View view, int position, long id) rn System.out.println(position);rn rnrn @Overridern public void onNothingSelected(AdapterView parent) rn System.out.println("没有做出选择");rn rn);
关于ConvertView错乱的问题
下午遇到一个很奇怪的问题,修改了ListView中的一个item对象的类型,执行notifyDatasetChange方法后,getView 传过来的convertView类型不对!导致View绘制时调用对象数据错误!!!现象是这样的:在单个card中执行updateCardView方法时,更新对象类型,直接notifyDataSetChange方法,没有任何问题。 但是改为下面的写法就不行了ne
listView convertView缓存机制 & 异步加载图片 问题剖析
listView convertView缓存机制 & 异步加载图片 问题剖析     先介绍下listView的convertView缓存机制 & 异步加载图片:     convertView缓存机制:我们假设一个屏幕一次显示8个item,当第9个item划进屏幕时,ListView对adapter说,返给我一个view,我要显示。adapter调用get
初学者关于ListView求解???
我在程序中单独输入以下代码运行正常: ListViewItem lviStus = new ListViewItem("aa");rn lviStus.SubItems.Add("1");rn lviStus.SubItems.Add("a");rn lviStus.SubItems.Add("c");rn this.lvStudent.Items.Add(lviStus);rn可为什么写在一个循环里就不行了了?rn String sql = String.Format("select * from student where stu_uname like '%0%'", txtStu_name.Text);rn rn DBHelper.conn.Open();rn SqlCommand comm = new SqlCommand(sql, DBHelper.conn);rn SqlDataReader dr = comm.ExecuteReader();rn lvStudent.Clear();rn rn if (!dr.HasRows)rn rn MessageBox.Show("没有相信学员的信息");rnrn rn elsern rn while(dr.Read()) //单步调试是运行到了这里rn rnrn ListViewItem lviStus = new ListViewItem("aa");rnrnrnrn //lviStus.SubItems.AddRange(new String[] stu_name, stu_key, stu_state);rn //lviStus.SubItems.AddRange(new String[] "aa", "bb", "cc" );rn lviStus.SubItems.Add("1");rn lviStus.SubItems.Add("a");rn lviStus.SubItems.Add("c");rn this.lvStudent.Items.Add(lviStus);rn rn rn dr.Close();rn DBHelper.conn.Close();rn rn
listview复用convertView导致CheckBox复选的问题
解决的方法: 我们先将checkbox的是否选中的状态根据position保存下来,然后在adapter的getview方法中,我们通过position来动态设置checkbox的状态。 在此之前,由于item中有checkbox,与listview的item点击事件发生了冲突,我们需要在item布局里的checkbox控件中 添加如下两行代码:
Listview的convertView机制和ViewHolder机制与西游记的相似之处
使用ListView不可避免的要重写Adapter的getView(int position, View convertView, ViewGroup parent)方法,为了减少资源消耗,要使用convertView复用机制;为了提高系统性能,常用ViewHolder机制。
ListView中有不同的ViewType,它的convertView实现
a_long_总结: 只要在继承BaseAdapter的MyAdapter中完成以下3点: 1:重写getViewTypeCount()-总共的Type数量; 2:重写getItemViewType(int)-由position来得知Type的id; 3:根据Type在getView中正确的创建convertView; 那么Adapter会调用getTimeViewType方法来
ListView中convertView和ViewHolder的复用机制工作原理
我们都知道在getView方法中的操作是这样的:先从xml中创建view对象(inflate操作,我们采用了重用convertView方法优化),然后在这个view去findViewById,找到每一个子View,如:一个TextView等。这里的findViewById操作是一个树查找过程,也是一个耗时的操作,所以这里也需要优化,就是使用viewHolder,把每一个子View都放在Holder中,当第一次创建convertView对象时,把这些子view找出来。然后用convertView的setTag
Listview 5 使用convertview优化对象的建
一套视频让你全面掌握Android入门与UI技术,没有废话的同时,学起来还不枯燥,还能与威哥真身面对面的学!n视频特点:n1、双人互动式教学n2、通俗易懂,深入浅出n3、生活化讲解深入问题,不走官腔官调n4、课程体系有深度,知识点全面n5、全套视频使用完美的开发环境,Android Studio + JDK1.8 + Android 5.0
新手,关于ACCESS2007的一些问题。求解~
ID wjid wjbm wjnamern1 1 WJ0001 钻头rn2 2 WJ0001 钻头rn3 WJ0001 钻头rn4 WJ0001 钻头rn5 WJ0001 钻头rnrn在ACCESS 2007数据库中操作,怎么才能让wjid的值跟ID一样自动增长呢? 请各位帮忙解决下。谢谢
关于ViewPager使用的一些问题,求解???
viewpage这个控件是在1.6以上才能用的,大家一定用过安卓市场吧,那种类似与tabhost而且可以滑动的效果一定很绚丽吧,这里说明一下,安卓市场的滑动和google市场的滑动一样,可以预览滑动的,就是你在拖动的时候就能看见滑动的效果了,而tabhost现实的滑动是要手势完毕才能执行.rn其实,安卓市场和google,已经QQ的应用宝都是使用了viewPager这个控件做的,但是我遇到个难度,就是viewpager这个控件默认是预先加载当前与左右的view的,但是我不需要,对于我的应用这样消耗内存了,就想问一下,怎么才能让viewpager只加载当前页,等移动到下个页面才去加载下个页面内容?
android关于aidl的一些问题
在程序A没启动的时候,程序B无法调用程序A的对外服务;程序A启动的时候,是正常的。测试机是一个双系统的手机,在其他普通手机上试过,没有任何问题。请问关于双系统的测试机如何解决这个问题(一个系统是普通系统,一个系统是安全系统)
getView()不复用convertView,ListView即毫无复用!(ListView回收机制)
前提概要 getView()不复用convertView,ListView即毫无复用! 标题的话不知道有没有震惊到大家,反正是与笔者一直以来的想法相悖的。 之前笔者一直认为,使用BaseAdapter如果不复用convertView,那么可能会一定程度上降低ListView的性能,但是ListView本身一定还有其优化性能的方式,所以写demo时也经常偷一下懒,就不写convertV...
android中的ListView的一些问题,求高手!!!!
如图中的界面,是不是listview只能布满全屏,不能小部分区域?我运行网上的例子后,根本就没有显示那个listview,可是代码中我明明绑定了它的。。我的意图是将mysql数据库里面的数据显示到这个view里面,数据库的连接啊什么的已经搞定,可以返回数据了,高手能否给个方法,怎么实现[img=http://community.csdn.net/][/img]?不知道图片可以显示不,真个布局就是一个查询的文本框,按钮,下面添加一个listview,布局为绝对布局…xml代码见下面rnrnrn rn rn rn rn rn rnrn rn rn rn
Android ListView使用convertView解决内存溢出问题(推介使用recyclerview,listview已过时)
比方说在加载各种图片的时候,listview不及时回收的话,可能会造成内存溢出,这个时候就是看getview方法的时候了。 public View getView(int position, View convertView, ViewGroup parent) {              ViewHolder holder = null;       if(convertView
求教listview的一些问题
刚开始学用listview,提2个问题请高手帮帮我rn1.怎么指定listview选定哪一行?rn2.怎么获取listview选定行的某一列的值
listview查询的一些问题
鼠标通过点击左边listview上的items时间 来获取数据库对应的数据获取到右边的listview上[img=https://img-bbs.csdn.net/upload/201804/16/1523849764_478717.png][/img]rn这个是数据库的图片[img=https://img-bbs.csdn.net/upload/201804/16/1523849786_55487.png][/img]rn这个是我代码的图片[img=https://img-bbs.csdn.net/upload/201804/16/1523849799_23369.png][/img]rn我调试会出现这个错误[img=https://img-bbs.csdn.net/upload/201804/16/1523849339_203886.png][/img]rn这种问题怎么处理 新手 麻烦给点指示 谢谢
ListView控件使用的一些问题
在数据绑定转换时,代码如下:rnrn[code=Java]rnList> data = new ArrayList>();rn for(int i = 0;i < 7;i++)rn HashMap item = new HashMap();rn item.put("setPics", mSettingPics[i]);//mSettingPics是定义的一个Integer数组,指向的是图片资源IDrn item.put("setNames", mSettingName[i]);//mSettingName也是定义的一个Integer数组,指向的是文字资源IDrn data.add(item);rn rn SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.main_item,rn new String[]"setPics","setNames", rn new int[]R.id.safe_setting_pic,R.id.safe_setting_name);rn safeSettingListView.setAdapter(adapter);rn[/code]rnrn但最后效果是图片正常显示出来,本该想让它显示文字的却直接把ID显示出来了,请问这是哪个步骤没有弄好吗?
急!!!!! C# ListView 的一些问题!!!!!
怎么得到 选定项的 Text 信息!!!以及它的 索引号!!!rnrn因为得不到选定项的索引号,,我就不知道怎么删除选定的信息了!!!!rnrn还有怎么通过 Text 信息来得到它的索引号!!!!rnrn谢谢了!!!
ListView泛型取值的一些问题
[code=C#]这是我绑定ListView数据的操作rn//取得一个集合rnList list = SelID > 0 ? bdm.GetAllDepotByID(SelID) : bdm.GetAllDepot();rn//我写的一个泛型方法通过实体类集合给ListView赋值的过程rnms.ListViewByModelList(list, lvMain);rnrn问题就出来了,我是通过属性排序给ListView赋值的rn也就是说,我的在ListView里的公司、上级部门只能是数字了,rn这是我的泛型绑定的方法rn #region 根据实体集显示ListView数据rn /// rn /// ListView显示数据rn /// rn /// 实体类rn /// 实体类集合rn /// ListView控件rn public void ListViewByModelList(List list, ListView lv)rn rn lv.Items.Clear();rn foreach (T t in list)rn rn PropertyInfo[] prop = t.GetType().GetProperties();rn ListViewItem item = new ListViewItem(prop[0].GetValue(t, null).ToString());rn item.Tag = prop[0].GetValue(t, null);rn for (int i = 1; i < prop.Length; i++)rn rn item.SubItems.AddRange(new string[] prop[i].GetValue(t, null).ToString() );rn rn lv.Items.Add(item);rn rn rn #endregionrn[/code]rn[img=http://i3.6.cn/cvbnm/56/2e/4c/eca48d2383b472d953094362781a55e5.jpg][/img][img=http://i3.6.cn/cvbnm/5b/ce/6b/46169bf0a15c8a3cc0477c3ad254ca5c.jpg][/img]rn[color=#0000FF][size=11px]因为实体类有很多所以不可能每个都要去判断的rn有什么办法可以在泛型方法里或者ListView有什么更好的方法可以把上级部门名称、公司名称显示出来呢rn换句话说:外键ID怎么转换成名称到ListView里(要泛型或者其他)rn期待前辈们指点[/size][/color]
listView简单使用和出现的一些问题
先将基本的流程展示出来; 在这里只介绍SimpleAdapte适配器;//这是基本模本 //因为java里面的单继承,如果需要继承其他的Activity,不能继承ListActivity时,按照下面的流程、 ListView listView1 = (ListView) findViewById(R.id.ListView1); SimpleAdapter adap
android 关于ListView的问题
怎样获取ListView上的文本信息。rn比如说我的ListView列出了一些城市的名字,我点击一下城市的名字我就可以获得这个名字然后用Toast显示出来。
关于使用ListView时遇到的一些问题
1.Listview中未被显示(被遮蔽)的对象会被回收 当Listview中的内容超出Listview的实际宽度时,Listview中未被显示的对象会被回收,当你使用的volley等的图片加载框架时图片未经过保存而在Adapter中直接设置获取到的bitmap的话,你在滚动listview时会导致图片重新下载。
VB.NET中关于ListView拖动的一些问题
1.我想让ListView(详细信息方式)中的项,可以拖动,并且拖动后,程序能够获得拖动之前项的索引和之后的项的索引。rn2.我想让ListView拖动时,项以半透明方式跟随鼠标。同时项上有一个黑条,能够指示拖到哪个项前面。[img=https://img-bbs.csdn.net/upload/201308/09/1376017754_366333.png][/img]rn3.往ListView里拖动文件,程序能对文件作出相应处理(其中包括往ListView里添加项,假设为AddFile()方法),并且添加的项自动到鼠标拖动后的位置。同时拖动时也要有黑条,能够指示拖到哪个项前面。rn4.从ListView里往外拖动文件,鼠标变成在资源管理器里按住Ctrl拖动文件时的指针图标,可以复制该文件到指定位置;如果按住Shift,鼠标变成在资源管理器里按住Shift拖动文件时的指针图标,可以移动该文件到指定位置。最好是和Windows 7中按Ctrl/Shift拖动文件时一样,鼠标后边有“复制到 某某”的提示。[img=https://img-bbs.csdn.net/upload/201308/09/1376016395_370936.png][/img]没有也可以。rn
对Android中convertView的深入理解
convertview的出现是为了解决BaseAadpter类中getview()的问题,因为当listview 有很多item时,需要不断加载,这会导致系统运行慢,而且浪费,所以就引用了recycle机制,当每一屏中所有的item都加载完,接着加载下一屏时,convertview就起到了关键的作用。
android 关于使用retrofit2.0的一些问题
1. 请求这样的格式时:http:IP地址/?action="" 必须在@GET(“/”) 添加"/"  如果添加在baseUrl里面会出现java.lang.IllegalArgumentException: Missing either @GET URL or @Url parameter. 而且这个@GET的参数是不能为空的,好奇怪?????? 2.返回格式如下:{status=
android 关于软键盘的一些问题记录
项目中有一个需求,类似小红书app笔记评论 点击评论视图外部,隐藏评论视图并关闭软键盘 在activity的dispatchTouchEvent @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) {...
Android关于手机适配的一些问题
在开发中我们不可避免的遇到一些手机适配的问题,而我之前做手机适配的时候,很头痛,因为各个机型真的差别太大了。所以就请教了一些前辈们:关于手机适配,官方推荐界面控件是要用dp或者px,而文字需要使用sp,sp是经过处理的,所以说在显示文字上面最好用sp。    但是在使用sp显示文字上面,显示出来的真的让我很无奈,有的说用dp,结果dp显示出来效果确实比之前好很多。总结一下吧,可能会有不对的地方,
关于开放平台 android java的一些问题。
进来android很火,而我对于android的了解是目前安卓只开放了java平台,而且安卓的内核是linux的内核。所以我想,开发java平台,也就是基于安卓系统的应用都是用java开发的,是不是只是说是安卓只有基于java的编译器或者是基于java的IDE之类的意思?????如果只是开放编译器的话那不是以后安卓也会开放c或者C++平台?想请教一下高手,至少可以指点一下了解这方面信息的关键字哈。
高分求解workflow的一些问题
我现在正在用workflow作一个OA系统。rn其中遇到一些问题,请版主指点rn1、某个环节并行处理应该怎么设置,如文件传达到部门,要几个部门成员都去处理,现在好像只要一个人申请,其他人就不能处理了。rn2、某个环节如果需要选择此环节某个具体人员处理,应该怎样设置?或者有没有变通的办法可以处理?rn3、多种文件流程相同,只是使用表单不同,怎样设置可以只配置一个流程就可以完成。rn4、处理人的处理意见怎样体现在表单上rn5、如果人员组织很庞大,可不可以将其分开在不同的人员组织中,而且不影响流程运行。rnrn请各位高手赐教,小弟在这里谢谢了。
android通讯录中搜索框和listview的问题,求解
搜索框和listview不能同时显现出来。。。在layout中谁放在前面,谁就可以显示,另外个却显示不出来,核心代码如下:rnpublic void onCreate(Bundle savedInstanceState) rn super.onCreate(savedInstanceState);rn setContentView(R.layout.main1);rn rn searchText=(EditText)this.findViewById(R.id.searchText);rn listView=(ListView)this.findViewById(R.id.listView);rn rn Intent intent = getIntent();rn if (intent.getData() == null) rn intent.setData(ContactsProvider.CONTENT_URI);rn rnrn listView.setOnCreateContextMenuListener(this);rnrn Cursor mCursor = managedQuery(getIntent().getData(),rn ContactColumn.PROJECTION, null, null, null);rnrn // 注册的每个列表的表现形式rn SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,rn android.R.layout.simple_list_item_2, mCursor, new String[] rn ContactColumn.NAME, ContactColumn.MOBILENUM ,rn new int[] android.R.id.text1, android.R.id.text2 );rnrn listView.setAdapter(adapter);rn listView.setOnItemClickListener(new OnItemClickListener() rn public void onItemClick(AdapterView parent, View view,rn int position, long id) rn Uri uri=ContentUris.withAppendedId(getIntent().getData(), id);rn String action=getIntent().getAction();rn if(Intent.ACTION_EDIT.equals(action))rn startActivity(new Intent(Intent.ACTION_EDIT,uri));rn rn elsern startActivity(new Intent(Intent.ACTION_VIEW,uri));rn rn rn );rn rnxml文件如下:rnrnrn rn rnrnrnrn
相关热词 c# login 居中 c# 考试软件 c# 自然语言分析 c# 分段读取文件 c# 泛型反射 c#打断点 c# 时间转多少秒 c# 线程函数加参数 c# modbus 读取 c#查询集合表