android 中的自定义Adapter中的getView方法不执行

wangtao4226 2011-08-28 08:54:00
android 中的自定义Adapter中的getView方法不执行 是什么原因??
...全文
6846 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Faith_hb 2014-04-28
  • 打赏
  • 举报
回复
ListView控件本身在xml中设置了gone,getView也不会执行
AppByte 2014-01-24
  • 打赏
  • 举报
回复
Warkey_Song 2013-10-09
  • 打赏
  • 举报
回复
遇到同样的问题,getCount()得到的数据是3,但getView方法没执行
Sword-Master 2013-09-13
  • 打赏
  • 举报
回复
引用 4 楼 kechanghe0705 的回复:
要首先调用super.getView(....),再重载
煞笔 这个回答你也能回答出来
cugkuan 2013-07-30
  • 打赏
  • 举报
回复
看看布局的问题,重点看看gridview
风中的树-life 2013-06-23
  • 打赏
  • 举报
回复
我的gridview也遇到这种问题,真心感觉很无语!,变态
zhangzxpan 2013-05-12
  • 打赏
  • 举报
回复
引用 16 楼 kakaxige 的回复:
listView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到 listView的长度,然后根据这个长度,调用getView()逐一绘制每一行。如果你的 getCount()返回值是0的话,列表将不显示同样return 1,就只显示一行。系统显示列表时,首先实例化一个适配器(这里将实例化自定义的适配器)。当手动完成适配时,必须手动映射数据,这需要重写getView()方 法。系统在绘制列表的每一行的时候将调用此方法。getView()有三个参数,position表示将显示的是第几行,covertView是从布局文 件中inflate来的布局。我们用LayoutInflater的方法将定义好的item.xml文件提取成View实例用来显示。然后将xml文件中 的各个组件实例化(简单的findViewById()方法)。这样便可以将数据对应到各个组件上了。但是按钮为了响应点击事件,需要为它添加点击监听 器,这样就能捕获点击事件。至此一个自定义的listView就完成了,现在让我们回过头从新审视这个过程。系统要绘制ListView了,他首先获得要 绘制的这个列表的长度,然后开始绘制第一行,怎么绘制呢?调用getView()函数。在这个函数里面首先获得一个View(实际上是一个 ViewGroup),然后再实例并设置各个组件,显示之。好了,绘制完这一行了。那再绘制下一行,直到绘完为止。 估计你getCount()返回值是0
我遇到这个问题,确实是这样的原因。
kakaxige 2011-12-19
  • 打赏
  • 举报
回复
listView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到 listView的长度,然后根据这个长度,调用getView()逐一绘制每一行。如果你的 getCount()返回值是0的话,列表将不显示同样return 1,就只显示一行。系统显示列表时,首先实例化一个适配器(这里将实例化自定义的适配器)。当手动完成适配时,必须手动映射数据,这需要重写getView()方 法。系统在绘制列表的每一行的时候将调用此方法。getView()有三个参数,position表示将显示的是第几行,covertView是从布局文 件中inflate来的布局。我们用LayoutInflater的方法将定义好的item.xml文件提取成View实例用来显示。然后将xml文件中 的各个组件实例化(简单的findViewById()方法)。这样便可以将数据对应到各个组件上了。但是按钮为了响应点击事件,需要为它添加点击监听 器,这样就能捕获点击事件。至此一个自定义的listView就完成了,现在让我们回过头从新审视这个过程。系统要绘制ListView了,他首先获得要 绘制的这个列表的长度,然后开始绘制第一行,怎么绘制呢?调用getView()函数。在这个函数里面首先获得一个View(实际上是一个 ViewGroup),然后再实例并设置各个组件,显示之。好了,绘制完这一行了。那再绘制下一行,直到绘完为止。


估计你getCount()返回值是0


wangtao4226 2011-12-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zk786957037 的回复:]
遇到了同样的问题,求真相!
[/Quote]
我的是handler出现的问题
飞翔的猪1420 2011-12-10
  • 打赏
  • 举报
回复
楼主问题解决没?给个回复!
飞翔的猪1420 2011-12-09
  • 打赏
  • 举报
回复
遇到了同样的问题,求真相!
wangtao4226 2011-08-29
  • 打赏
  • 举报
回复
OnCreate()里面的listView加载的数据
conciseorder_listview = (ListView) findViewById(R.id.myorder_listview);
concise_MyOrderAdapter = new PictureViewConciseMyOrderAdapter(this);
// concise_MyOrderAdapter.notifyDataSetChanged();
conciseorder_listview.setAdapter(concise_MyOrderAdapter);
wangtao4226 2011-08-29
  • 打赏
  • 举报
回复
package com.teego.adapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;

import com.teego.activity.PictureViewActivity;
import com.teego.activity.R;
import com.teego.db.DBHelperColumn;
import com.teego.db.DataBaseHelper;
import com.teego.db.SqliteHelperUtil;
import com.teego.entity.Vegetable;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
* @author wangtao
*
* 简介菜单的Adapter
*
*/
public class PictureViewConciseMyOrderAdapter extends BaseAdapter {
private Context context;
private LinearLayout linearLayout;
private LayoutInflater inflater;
private List<Vegetable> nameAndprice = new ArrayList<Vegetable>();
private Vegetable vv;
private SqliteHelperUtil db;
private ImageButton iv_delete;
private TextView txt_mealName;
private Vegetable vt = new Vegetable();
private LayoutInflater layoutInflater;
private static PictureViewConciseMyOrderAdapter instance = null;
private PictureViewActivity pv=new PictureViewActivity();

public Handler handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle b = msg.getData();
Vegetable vv = new Vegetable();

vv.setName(b.getString("mealname"));
vv.setPrice(b.getInt("mealprice"));
vv.setId(b.getInt("id"));

Log.i("bundle里面的数据11111", b.get("mealname") + "");

Log.i("mealname的数据111111", b.getInt("mealprice") + "");

Log.i("mealprice的数据11111", b.getInt("id") + "");

addMealName(vv);
notifyDataSetChanged();
};
};

public PictureViewConciseMyOrderAdapter() {

}

public PictureViewConciseMyOrderAdapter(Context context) {
this.context = context;
layoutInflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public static PictureViewConciseMyOrderAdapter getInstance() {
if (instance == null) {
instance = new PictureViewConciseMyOrderAdapter();

}
return instance;

}

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

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

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

@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {

linearLayout = (LinearLayout) layoutInflater.inflate(
R.layout.myorder_listview, null);

// inflater = LayoutInflater.from(context);
// if (convertView == null) {
// convertView = inflater.inflate(R.layout.myorder_listview, null);

// 简介菜单的菜名

txt_mealName = (TextView) linearLayout.findViewById(R.id.txt_mealname);

// 简介菜单的删除按钮
iv_delete = (ImageButton) linearLayout.findViewById(R.id.ibtn_delete);

// }
vt = nameAndprice.get(position);
System.out.println("gmajjjkkkklg"
+ nameAndprice.get(position).getName());
txt_mealName.setText(vt.getName());

iv_delete.setTag(position);
Log.i("tag:Position", position + "");

iv_delete.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View view) {

int tag = (Integer) view.getTag();
// vv=new Vegetable();
vv = nameAndprice.get(tag);
nameAndprice.remove(nameAndprice.get(tag));
notifyDataSetChanged();
System.out.println("临时数据库中ID " + vv.getId());

db = new SqliteHelperUtil(context);
db.deleteDataFromTable(vv.getId());// 从数据库中删除临时表中的数据
db.close();
}
});

return linearLayout;
}

// 删除菜名
public void deleteMealItem(int index) {
nameAndprice.remove(index);
notifyDataSetChanged();
}

public void addMealName(Vegetable vt_name) {
vv = new Vegetable();
vv.setName(vt_name.getName());
vv.setPrice(vt_name.getPrice());
vv.setId(vt_name.getId());
nameAndprice.add(vv);

Log.i("name111", vt_name.getName());
Log.i("name111", vt_name.getPrice() + "");
Log.i("name111", nameAndprice.size() + "");

this.notifyDataSetChanged();

System.out.println("getCount()"+getCount());
}

}
addMealName(Vegetable vt_name)这个方法数据都可以加载进来 就是数据没有显示出来效果
j_f0001 2011-08-29
  • 打赏
  • 举报
回复
要首先调用super.getView(....),再重载
小裴同学 2011-08-29
  • 打赏
  • 举报
回复
嗯 return view。。。
sunmable 2011-08-29
  • 打赏
  • 举报
回复
如果说没有view的话你肯定是设置了adapter后再增加的数据。这只是我的猜测......
sunmable 2011-08-29
  • 打赏
  • 举报
回复
那你须要在设置adapter之前加入数据,如果说没有view的话那肯定没有view
wangtao4226 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sunmable 的回复:]
看了十分钟,太累了。代码的可读性可想而知。

看了好久没有看明白你的handler是干什么的?没有发送请求的情况下它不会执行啊。

大体看明白你的思路,就是handler接收数据,然后addMealName()这样nameAndprice这个list中就有数据了。

是这样吗?

但是我看不明白的是handler中的msg是怎么来的??
[/Quote]


是这个意思 !!在Activity中造几条假数据可以加载到listview中 , 这样做为什么不可以呢??
wangtao4226 2011-08-29
  • 打赏
  • 举报
回复
是这个意思 !!在Activity中造几条假数据可以加载到listview中 , 这样做为什么不可以呢??
sunmable 2011-08-29
  • 打赏
  • 举报
回复
看了十分钟,太累了。代码的可读性可想而知。

看了好久没有看明白你的handler是干什么的?没有发送请求的情况下它不会执行啊。

大体看明白你的思路,就是handler接收数据,然后addMealName()这样nameAndprice这个list中就有数据了。

是这样吗?

但是我看不明白的是handler中的msg是怎么来的??
加载更多回复(3)

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧