Я новичок в Android, и у меня возникли проблемы с реализацией списка с помощью специального адаптера. Макет для моей строки адаптера состоит из изображения, текста и двух кнопок. Две кнопки соответствуют данным, заполняющим эту конкретную строку. При первоначальной загрузке списка все работает отлично, поскольку кнопки соответствуют своей конкретной строке. Однако после прокрутки отдельные кнопки больше не соответствуют данным, перечисленным в этой строке. Например, перед прокруткой, если я нажимаю кнопку в строке 5, она возвращает строку 5, но после прокрутки, если я нажимаю кнопку в строке 20, она возвращает строку 3. Любая помощь в разрешении этого вопроса приветствуется.
МОЙ КЛАСС АДАПТЕРА
public class MyAppointments_ListAdapter extends BaseAdapter implements OnClickListener {
private ArrayList<HashMap<String, String>> listData;
private LayoutInflater layoutInflater;
Context c;
AlertDialog alert;
int selection;
String responce_for_push = null;
URL push_message = null;
public static String adapter_email;
public MyAppointments_ListAdapter(Context context, ArrayList listData) {
this.listData = listData;
layoutInflater = LayoutInflater.from(context);
c = context;
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.layout_row_myappointments, null);
holder = new ViewHolder();
holder.userAvatar = (ImageView) convertView.findViewById(R.id.client_image);
holder.userName = (TextView) convertView.findViewById(R.id.username);
holder.userStatus = (TextView) convertView.findViewById(R.id.status);
holder.userTime = (TextView) convertView.findViewById(R.id.time);
holder.profile = (ImageButton) convertView.findViewById(R.id.profile);
holder.profile.setOnClickListener(MyAppointments_ListAdapter.this);
holder.profile.setTag(position);
holder.cancel = (ImageButton) convertView.findViewById(R.id.cancel);
holder.cancel.setOnClickListener(MyAppointments_ListAdapter.this);
holder.cancel.setTag(position);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if(LandingActivity.user_isClient){
holder.userName.setText((listData.get(position)).get("Barber_Username"));
}else{
holder.userName.setText((listData.get(position)).get("Username"));
}
if((listData.get(position)).get("Status").equals("PENDING")){
holder.userStatus.setText( "Appointment Pending.");
}else{
holder.userStatus.setText( "Appointment Confirmed.");
}
holder.userTime.setText( (listData.get(position)).get("Time"));
int loader = R.drawable.app_icon;
if(LandingActivity.user_isClient){
String profilepicURL = "http://184.107.149.234/KutTime/clients/"+( listData.get(position)).get("Email")+"/profile.jpg";
// ImageLoader class instance
ImageLoader imgLoader = new ImageLoader(c);
imgLoader.DisplayImage(profilepicURL, loader, holder.userAvatar);
}else{
String profilepicURL = "http://184.107.149.234/KutTime/clients/"+( listData.get(position)).get("Client_Email")+"/profile.jpg";
// ImageLoader class instance
ImageLoader imgLoader = new ImageLoader(c);
imgLoader.DisplayImage(profilepicURL, loader, holder.userAvatar);
}
return convertView;
}
static class ViewHolder {
ImageView userAvatar;
TextView userName;
TextView userStatus;
TextView userTime;
ImageButton profile;
ImageButton cancel;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.profile:
selection = (Integer)v.getTag();
Log.e("Selection", String.valueOf(selection));
if(LandingActivity.user_isClient){
adapter_email = (listData.get(selection)).get("Email");
Log.e("Adapter Email", adapter_email);
Intent myIntent = new Intent("com.tpssquared.kuttime.PROFILE_BARBER_VIEW");
myIntent.putExtra("ADAPTER_EMAIL", adapter_email);
c.startActivity(myIntent);
}else{
adapter_email = (listData.get(selection)).get("Client_Email");
Log.e("Adapter Email", adapter_email);
Intent myIntent = new Intent("com.tpssquared.kuttime.PROFILE_CLIENT_VIEW");
myIntent.putExtra("ADAPTER_EMAIL", adapter_email);
c.startActivity(myIntent);
}
break;
case R.id.cancel:
selection = (Integer)v.getTag();
AlertDialog.Builder builder = new AlertDialog.Builder(c);
builder.setTitle("Cancel Appointment");
if(LandingActivity.user_isClient){
builder.setMessage("Cancel appointment with " + (listData.get((Integer)v.getTag())).get("Username") + " at " + (listData.get((Integer)v.getTag())).get("Time") );
}else{
builder.setMessage("Cancel appointment with " + (listData.get((Integer)v.getTag())).get("Barber_Username") + " at " + (listData.get((Integer)v.getTag())).get("Time") );
}
builder.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
alert.dismiss();
}
});
builder.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
cancelAppointment();
}
});
alert = builder.create();
alert.show();
break;
}
}