Android 滚动listview时,会调整listviewitems的大小
我有一个问题,我用layout Incoter实现了自定义listview。我面临一个问题,当我滚动列表视图时,它的项目会调整为小项目。我无法跟踪问题。。请帮忙Android 滚动listview时,会调整listviewitems的大小,android,android-listview,Android,Android Listview,我有一个问题,我用layout Incoter实现了自定义listview。我面临一个问题,当我滚动列表视图时,它的项目会调整为小项目。我无法跟踪问题。。请帮忙 class ListDownloadedAdapter extends BaseAdapter { ArrayList<View> data=null; Context mContext=null; LayoutInflater mInflater; public ListDownloadedAd
class ListDownloadedAdapter extends BaseAdapter
{
ArrayList<View> data=null;
Context mContext=null;
LayoutInflater mInflater;
public ListDownloadedAdapter(ArrayList<View> arg,Context context)
{
mInflater = LayoutInflater.from(context);
data=arg;
mContext=context;
}
public void reverse()
{
Collections.reverse(data);
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return data.size();
}
@Override
public Object getItem(int arg0)
{
return data.get(arg0);
}
@Override
public long getItemId(int arg0) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent)
{
ListContent holder;
holder=new ListContent();
//convertView=mInflater.inflate(R.layout.download_progress, parent, false);
convertView=(View)getItem(position);
holder.pbar=(ProgressBar)convertView.findViewById(R.id.status_progress);
holder.statustext=(TextView)convertView.findViewById(R.id.status_text);
holder.filesize=(TextView)convertView.findViewById(R.id.txtkbps);
return convertView;
}
class ListContent
{
ProgressBar pbar=null;
TextView statustext=null,filesize=null;
}
}
类列表下载适配器扩展BaseAdapter
{
ArrayList数据=null;
上下文mContext=null;
拉平机;
公共列表下载适配器(ArrayList参数,上下文)
{
mInflater=LayoutInflater.from(上下文);
数据=arg;
mContext=上下文;
}
公共无效反向()
{
收集。反向(数据);
}
@凌驾
public int getCount()
{
//TODO自动生成的方法存根
返回data.size();
}
@凌驾
公共对象getItem(int arg0)
{
返回data.get(arg0);
}
@凌驾
公共长getItemId(int arg0){
返回0;
}
公共视图getView(int位置、视图转换视图、视图组父视图)
{
列表内容持有者;
holder=新的ListContent();
//convertView=mInflater.充气(R.layout.download\u progress,parent,false);
convertView=(视图)getItem(位置);
holder.pbar=(ProgressBar)convertView.findViewById(R.id.status\u progress);
holder.statustext=(TextView)convertView.findViewById(R.id.status\u text);
holder.filesize=(TextView)convertView.findViewById(R.id.txtkbps);
返回视图;
}
类列表内容
{
ProgressBar pbar=null;
TextView statustext=null,filesize=null;
}
}
下面是listview实现的xml文件
<ListView android:id="@+id/downloadsegmentdownloadecomplete" android:divider="@drawable/transparent" android:layout_width="fill_parent" android:layout_height="wrap_content" android:cacheColorHint="#00000000" android:dividerHeight="0px" ></ListView>
以下是充气单元的xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="match_parent" android:paddingTop="5dp" android:paddingBottom="5dp" android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_gravity="center|fill">
<RelativeLayout
android:id="@+id/completed_progresslayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/completed_status_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/txtpercent"
android:focusable="false"
android:focusableInTouchMode="false"
android:text="filename"
android:textColor="#686870" />
<TextView
android:id="@+id/completed_txtkbps"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/completed_status_text"
android:layout_marginRight="10dp"
android:text="kbps"
android:textColor="#b0b0b8" />
</RelativeLayout>
很抱歉,您对适配器的整个实现都是错误的 适配器应该只存储数据(字符串、整数,可能是游标),而不存储视图本身。 对于您试图实现的目标,我建议您扩展ArrayAdapter,只覆盖getView() 比如:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = createNewView();
Holder h = (Holder)convertView.getTag();
h.textView1.setText( .... // from here you put the data into the existing views.
return convertView;
// then the new view
private View createNewView() {
// Instantiate view
View v = getLayoutInflater().inflate(R.layout.myView, null);
Holder h = new Holder();
v.setTag(h);
// point to the views
h.textView1 = (TextView) findViewById(R.id.title);
// carry on for the other views....
return v;
}
这对你有意义吗?-1。您需要回到实现列表视图和自定义适配器的基础上。实际上,它可以根据功能完美地工作,但唯一的问题是滚动列表视图时视图会缩小。它可能正在工作。但这是一种非常低效的方法,可能很容易泄露您的上下文。如果你不相信我的话,去谷歌I/O 2011看看视频。安卓系统的工程师们自己为我们指明了方向。就像我贴的。