0

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;

}

}

コードがあまり役に立たないことはわかっていますが、一部の人々の提案に投稿しているだけです。

ありがとう。

4

4 に答える 4

0

これが最善の方法かどうかはわかりませんが、試してみてください。

このようなリスナーを作成します

public interface ViewLoadedInterface {
    public void onFirstViewLoaded(/**add params if you like*/);
}

Interfaceそれをあなたのに渡しますAdapteronFirstViewLoaded()最初のメソッドが返されたときにのみメソッドを呼び出し、Viewそのインスタンスに対して再度呼び出すことはありません。そうしない、リサイクルの開始時に問題が発生します。

呼び出されたらlist.getChildAt(0)、インターフェイスの実装で実行します。

したがって、最終的に実装は次のようになります

public class YourActivityClass extends Activity implements ViewLoadedInterface {
    ...

    @Override
    public void onFirstViewLoaded() {
        ...

        something = list.getChildAt(0);

        ...
    }
}
于 2013-10-30T10:23:39.937 に答える
0

いつリストにデータを追加しますか? 最初の要素にいつアクセスしたいですか? フラグメントを使用している場合は、onViewCreated、onCreateView メソッドがあり、onCreateView メソッドでリストビューにデータを入力し、onViewCreated メソッドでリストビューにアクセスできます。アクティビティでは異なります。最初の要素への onCreate() および後で onStart() または onResume() アクセスでリストを作成できます。

于 2013-10-30T10:06:55.747 に答える
0

リストビューに使用Custom Adapterして、メソッドの特定の位置でビューをインターセプトできますpublic View getView(int position, View convertView, ViewGroup parent)。ここで確認できます

if(position==0){
 //do your stuff
}

カスタムアダプターのこの回答を見てください

于 2013-10-30T10:05:47.653 に答える