list.onLoadListener のようなイベントがない場合(リストはデータの入力で完了します)、リストの最初の行にアクセスするにはどうすればよいですか?
リストはパフォーマンスのためにその行を再利用するため、このリスナーは理解できるものではありません。しかし、少なくとも 1 つの項目 (最初の項目、位置 0) がある場合は、リストの最初の項目にアクセスする必要があります。
リストにアダプターを設定した後
list.getChildAt(0)
null を返します。それで、最初のアイテムにアクセスするために遅延を置く必要がありますか?
リストアイテムクリックリスナーを使用して、リストアイテム(そのアイテムのビュー)にアクセスできます。リストの最初の項目がいっぱいになっていることを確認できるときに 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;
}
}
コードがあまり役に立たないことはわかっていますが、一部の人々の提案に投稿しているだけです。
ありがとう。