パーソナライズされたギャラリーを作成していますが、ギャラリーから画像をロードしようとするたびに問題が発生します (どの画像をロードする必要があるかを知るために、パラメーターを指定して別のアクティビティを呼び出します)。問題は、表示される画像が本来あるべきものではないことです。私が持っている質問は、自分の画像がある行をどのように追跡するのですか?
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 を無効にします)。両方のリスナーを同時にアクティブにする方法はありますか? このようにして、メイン アクティビティ クラスで画像の行を取得し、アダプター クラス内で画像の列を取得できます。
読んでくれてありがとう!