1

パーソナライズされたギャラリーを作成していますが、ギャラリーから画像をロードしようとするたびに問題が発生します (どの画像をロードする必要があるかを知るために、パラメーターを指定して別のアクティビティを呼び出します)。問題は、表示される画像が本来あるべきものではないことです。私が持っている質問は、自分の画像がある行をどのように追跡するのですか?

MainActivity プログラムでギャラリーを作成します

public class MainActivity extends Activity {

ListView gallery;
ArrayList<Photo> row = new ArrayList<Photo>();

protected void onCreate(Bundle icicle){
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(icicle);
    setContentView(R.layout.gallery);        

    gallery = (ListView) findViewById(R.id.lvdata);

    init();

    gallery.setAdapter(new PhotoAdapter(getBaseContext(), row));
}

次に、ホルダーを使用して画像を追跡します(PhotoAdapterクラス内):

   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    positionAbs=position;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.row_photo, null);
        holder = new ViewHolder();            
        holder.iv1 = (ImageView) convertView.findViewById(R.id.iv1);
        holder.iv2 = (ImageView) convertView.findViewById(R.id.iv2);
        holder.iv3 = (ImageView) convertView.findViewById(R.id.iv3);
        holder.iv4 = (ImageView) convertView.findViewById(R.id.iv4);
        holder.row = position;


        final int rowL=holder.row;
        holder.iv1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {    
                val=1;
                loadIntent(calculaPos(rowL,val));

            }                      
        });  
        holder.iv2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                val=2;
                loadIntent(calculaPos(rowL,val));

            }
        });   

        holder.iv3.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                val=3;
                loadIntent(calculaPos(rowL,val));

            }
        });   

        holder.iv4.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                val=4;
                loadIntent(calculaPos(rowL,val));

            }
        });                 
        convertView.setTag(holder);

     } else {
        holder = (ViewHolder) convertView.getTag();
        }

    holder.iv1.setImageResource(list.get(position).getIv1());
    holder.iv2.setImageResource(list.get(position).getIv2());
    holder.iv3.setImageResource(list.get(position).getIv3());
    holder.iv4.setImageResource(list.get(position).getIv4());

    pos1=list.get(position).getIv1();
    pos2=list.get(position).getIv2();
    pos3=list.get(position).getIv3();
    pos4=list.get(position).getIv4();





    return convertView;
}

新しいホルダーを作成するたびに、ホルダーの行番号を追跡する方法があるかどうかを知りたいです。

編集私が取ったアプローチは、次のように、いつクリックされたかを知るリスナーをギャラリーに追加することです。

    gallery.setAdapter(new PhotoAdapter(getBaseContext(), row));
    gallery.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) 
        {                   
                System.out.println(">> column value is "+arg2);
                            //arg2 is the image position

        }  

    });}

問題は、作成したアダプターのローカル値にアクセスできない (各行に 4 つの写真がある) ことですが、クリックしている行を取得できます (PhotoAdapter 内の onClickListener を無効にします)。両方のリスナーを同時にアクティブにする方法はありますか? このようにして、メイン アクティビティ クラスで画像の行を取得し、アダプター クラス内で画像の列を取得できます。

読んでくれてありがとう!

4

0 に答える 0