Android ListView项目何时绘制到屏幕上
我想知道什么时候创建Android ListView项目何时绘制到屏幕上,android,android-layout,listview,Android,Android Layout,Listview,我想知道什么时候创建ListView布局。我需要在项目视图上执行一个操作,因为我需要知道布局何时被绘制到屏幕上。我需要获取已创建视图的ID 有没有办法知道这是什么时候完成的 编辑(精度): 在ListView之后调用notifyDataSetChanged不起作用,ListView.getChildCount仍然返回0 我显示有限数量的项目,所有项目都显示在屏幕上 适配器需要为列表的每一行创建布局。ListView实例为每个数据元素调用适配器上的getView()方法。在此方法中,适配器创建行
ListView
布局。我需要在项目视图上执行一个操作,因为我需要知道布局何时被绘制到屏幕上。我需要获取已创建视图的ID
有没有办法知道这是什么时候完成的
编辑(精度):
- 在
不起作用,ListView之后调用notifyDataSetChanged
仍然返回ListView.getChildCount
0
- 我显示有限数量的项目,所有项目都显示在屏幕上
ListView
实例为每个数据元素调用适配器上的getView()
方法。在此方法中,适配器创建行布局并将数据映射到布局中的视图
在getView()
方法中,您可以展开基于XML的布局,然后根据此行的Java对象设置各个视图的内容。要扩展XML布局文件,可以使用LayoutInflator
系统服务
下面是Listveiw
的适配器示例
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MySimpleArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public MySimpleArrayAdapter(Context context, String[] values) {
super(context, -1, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
textView.setText(values[position]);
// change the icon for Windows and iPhone
String s = values[position];
if (s.startsWith("iPhone")) {
imageView.setImageResource(R.drawable.no);
} else {
imageView.setImageResource(R.drawable.ok);
}
return rowView;
}
}
适配器需要为列表的每一行创建布局。
ListView
实例为每个数据元素调用适配器上的getView()
方法。在此方法中,适配器创建行布局并将数据映射到布局中的视图
在getView()
方法中,您可以展开基于XML的布局,然后根据此行的Java对象设置各个视图的内容。要扩展XML布局文件,可以使用LayoutInflator
系统服务
下面是Listveiw
的适配器示例
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MySimpleArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public MySimpleArrayAdapter(Context context, String[] values) {
super(context, -1, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
textView.setText(values[position]);
// change the icon for Windows and iPhone
String s = values[position];
if (s.startsWith("iPhone")) {
imageView.setImageResource(R.drawable.no);
} else {
imageView.setImageResource(R.drawable.ok);
}
return rowView;
}
}
为了从视图中获取所有ID,我尝试了以下方法
private List<View> mChildren;
然后可以创建包含所有子视图的mChildren
。另外,您也可以选中。希望有帮助:)
更新
当我和Thomas在聊天中讨论时,我回想起来,视图添加的
onViewAdded
(来自API 23)也很有用。为了从视图中获取所有ID,我尝试了以下方法
private List<View> mChildren;
然后可以创建包含所有子视图的mChildren
。另外,您也可以选中。希望有帮助:)
更新
当我和Thomas在聊天中讨论时,我回想起来,添加的
onViewAdded
(来自API 23)也很有用。我认为每个项目都是在适配器设置时创建的。阅读本教程,您将在其中获得所有详细信息。我想我很清楚列表视图的工作原理。我尝试在notifyDataSetChange
后执行此操作,但GridView的子计数仍然为0。我将看一看这些教程nonetheless@ThomasRoulin不会同时创建所有项目(只有少量项目且几乎所有项目都同时显示在屏幕上的情况除外)。ListView
正在重新使用子视图:如果一次可以看到10个项目,则只会创建十几个子视图。我认为每个项目都是在适配器设置时创建的。阅读本教程,您将在其中获得所有详细信息。我想我很清楚列表视图的工作原理。我尝试在notifyDataSetChange
后执行此操作,但GridView的子计数仍然为0。我将看一看这些教程nonetheless@ThomasRoulin不会同时创建所有项目(只有少量项目且几乎所有项目都同时显示在屏幕上的情况除外)。ListView
正在重新使用子视图:如果一次可以看到10个项目,那么只会创建十几个子视图。这并不能回答我的问题,对吗?我知道如何制作列表视图
请相应地更新您的问题,您的问题是“我想知道列表视图布局何时创建。我需要知道布局何时绘制到屏幕”。请具体回答你的问题。所以我们可以帮助您找到正确的解决方案。不是答案,但仍然+1的努力:)这并没有回答我的问题,对吗?我知道如何制作列表视图
请相应地更新您的问题,您的问题是“我想知道列表视图布局何时创建。我需要知道布局何时绘制到屏幕”。请具体回答你的问题。所以我们可以帮助您找到正确的解决方案。不是答案,但仍然+1的努力:)