如果没有像 list.onLoadListener 之类的事件(列表完成数据填充)如何访问列表的第一行?
由于列表重复使用它的行来提高性能,所以这个监听器不存在,这是可以理解的。但是当至少有一个项目(第一项,位置 0)时,我需要访问列表的第一项。
将适配器设置为列表后
list.getChildAt(0)
返回我为空。那么我需要延迟访问第一项吗?
我们可以使用列表项单击侦听器访问列表项(该项目中的视图)。当我可以确定列表的第一项已填满时,我想使用 item。
我正在使用 TextureView 播放列表项中的视频。因此,一旦列表中填满了它的项目,我想自动播放第一个项目的视频。(无需任何点击或用户交互)。
这是我的代码:-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
list = (ListView) v.findViewById(R.id.list);
videoListDatas = new ArrayList<VideoListData>();
adapter = new MyVideoListAdapterNew(getActivity(), videoListDatas);
list.setAdapter(adapter);
getVideoList(); //Method which get data from server
}
这里是 getVideoList() 方法实现
private void getVideoList() {
final MyProgressDialog progressDialog = new MyProgressDialog(context);
new Thread(new Runnable() {
@Override
public void run() {
try {
// Implementation goes here fill array with data
} catch (Exception e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
progressDialog.dismiss();
}
});
}
}).start();
}
这是我的适配器
public class MyVideoListAdapterNew extends BaseAdapter {
Context context;
private LayoutInflater inflater;
ArrayList<VideoListData> videoListDatas;
public MyVideoListAdapterNew(FragmentActivity fragmentActivity,
ArrayList<VideoListData> videoListDatas) {
context = fragmentActivity;
this.videoListDatas = videoListDatas;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return videoListDatas.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return videoListDatas.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.myvideo_row, null);
holder = new ViewHolder();
holder.flVideo = (FrameLayout) convertView
.findViewById(R.id.flVideo);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
try {
//Filling views by getting values from array
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(position == 0 ){
//Code to play first video automatically
}else{
}
return convertView;
}
private static class ViewHolder {
FrameLayout flVideo;
}
}
我知道代码不会有太大帮助,但我只是根据某些人的建议发布它。
谢谢。