Ich habe drei Schaltflächen in einigen der Listenelemente in der Listenansicht und beim Klicken auf diese Schaltfläche möchte ich das Layout des Listenelements ändern, aber das Problem, vor dem ich stehe, ist unten aufgeführt .Button in der Listenansicht erstellt Problem beim Scrollen und auf Knopf klicken
1). Auf Knopfdruck ändert sich ein anderes Listen-Layout. 2). Auf dem Bildlauf der Listenansicht wird ein anderes Layout der Listenelemente geändert, auf das ich nicht geklickt habe.
Hier ist der Code der Adapterklasse.
import java.util.ArrayList;
import com.xsinfosol.DOT.R;
import com.xsinfosol.DOT.ImageLoading.ImageLoader;
import com.xsinfosol.DOT.LibraryClasses.RippleView;
import com.xsinfosol.DOT.model.DOT_Common_Model;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v7.internal.widget.ButtonBarLayout;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class Agenda_Adapter extends BaseAdapter {
Context context;
ArrayList<DOT_Common_Model> arrayList;
ViewHolder viewHolder;
public Agenda_Adapter(Context context , ArrayList<DOT_Common_Model> arrayList) {
// TODO Auto-generated constructor stub
this.context = context;
this.arrayList = arrayList;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return arrayList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return arrayList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView==null)
{
viewHolder = new ViewHolder();
convertView = LayoutInflater.from
(context).inflate(R.layout.agenda_event_list_item, null);
viewHolder.linearLayout = (LinearLayout)convertView.findViewById(R.id.agenda_button_layout);
viewHolder.linearLayout.setVisibility(View.GONE);
viewHolder.checkBox = (CheckBox)convertView.findViewById(R.id.agenda_event_checkbox);
viewHolder.eventName = (TextView)convertView.findViewById(R.id.agenda_event_name);
viewHolder.imageView = (ImageView)convertView.findViewById(R.id.agenda_event_imae);
viewHolder.place = (TextView)convertView.findViewById(R.id.agenda_event_place);
viewHolder.time = (TextView)convertView.findViewById(R.id.agenda_event_date_time);
viewHolder.going = (RippleView)convertView.findViewById(R.id.agenda_rippleview_going);
viewHolder.notGoing = (RippleView)convertView.findViewById(R.id.agenda_rippleview_not_going);
viewHolder.mayBe = (RippleView)convertView.findViewById(R.id.agenda_rippleview_maybe);
viewHolder.going.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
viewHolder.going.setVisibility(View.GONE);
viewHolder.notGoing.setVisibility(View.GONE);
viewHolder.mayBe.setVisibility(View.GONE);
Drawable tick = context.getResources().getDrawable(R.drawable.ic_action_tick);
tick.setBounds(0,0, 30, 30);
Button going = new Button(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 40));
params.setMargins(10,0, 10, 4);
going.setLayoutParams(params);
going.setBackgroundColor(context.getResources().getColor(android.R.color.holo_green_dark));
going.setText("Going");
going.setTextSize(15);
going.setTextColor(R.color.white);
going.setCompoundDrawables(null, null, tick, null);
going.setCompoundDrawablePadding(5);
going.setGravity(Gravity.CENTER);
if(viewHolder.linearLayout!=null)
viewHolder.linearLayout.removeAllViews();
viewHolder.linearLayout.addView(going);
}
});
viewHolder.notGoing.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
viewHolder.going.setVisibility(View.GONE);
viewHolder.notGoing.setVisibility(View.GONE);
viewHolder.mayBe.setVisibility(View.GONE);
Drawable cross = context.getResources().getDrawable(R.drawable.ic_action_cancel);
cross.setBounds(0,0, 30, 30);
Button button = new Button(context);
LinearLayout.LayoutParams paramsCross = new LinearLayout.LayoutParams(new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 40));
paramsCross.setMargins(10,0, 10, 4);
button.setLayoutParams(paramsCross);
button.setBackgroundColor(context.getResources().getColor(R.color.red));
button.setText("Not Going");
button.setTextSize(15);
button.setTextColor(R.color.white);
button.setCompoundDrawables(null, null, cross, null);
button.setCompoundDrawablePadding(5);
button.setGravity(Gravity.CENTER);
if(viewHolder.linearLayout!=null)
viewHolder.linearLayout.removeAllViews();
viewHolder.linearLayout.addView(button);
}
});
viewHolder.mayBe.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
viewHolder.going.setVisibility(View.GONE);
viewHolder.notGoing.setVisibility(View.GONE);
viewHolder.mayBe.setVisibility(View.GONE);
Drawable mayBe = context.getResources().getDrawable(R.drawable.ic_action_emo_err);
mayBe.setBounds(0,0, 30, 30);
Button maybe = new Button(context);
LinearLayout.LayoutParams paramsMaybe = new LinearLayout.LayoutParams(new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 40));
paramsMaybe.setMargins(10,0, 10, 4);
maybe.setLayoutParams(paramsMaybe);
maybe.setBackgroundColor(context.getResources().getColor(R.color.yellow));
maybe.setText("May Be");
maybe.setTextSize(15);
maybe.setTextColor(R.color.white);
maybe.setCompoundDrawables(null, null, mayBe, null);
maybe.setCompoundDrawablePadding(5);
maybe.setGravity(Gravity.CENTER);
if(viewHolder.linearLayout!=null)
viewHolder.linearLayout.removeAllViews();
viewHolder.linearLayout.addView(maybe);
}
});
viewHolder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
int getPosition = (Integer)buttonView.getTag();
arrayList.get(getPosition).setChecked(buttonView.isChecked());
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.agenda_event_checkbox, viewHolder.checkBox);
convertView.setTag(R.id.agenda_event_imae, viewHolder.imageView);
convertView.setTag(R.id.agenda_event_name, viewHolder.eventName);
convertView.setTag(R.id.agenda_event_place, viewHolder.place);
convertView.setTag(R.id.agenda_event_date_time, viewHolder.time);
convertView.setTag(R.id.agenda_button_layout, viewHolder.linearLayout);
convertView.setTag(R.id.agenda_rippleview_going, viewHolder.going);
convertView.setTag(R.id.agenda_rippleview_not_going, viewHolder.notGoing);
convertView.setTag(R.id.agenda_rippleview_maybe, viewHolder.mayBe);
}else
viewHolder = (ViewHolder)convertView.getTag();
viewHolder.checkBox.setTag(position);
viewHolder.going.setTag(position);
viewHolder.notGoing.setTag(position);
viewHolder.mayBe.setTag(position);
ImageLoader imageLoader = new ImageLoader(context);
ImageView imageView = viewHolder.imageView;
imageLoader.DisplayImage(arrayList.get(position).getImage(), imageView);
viewHolder.checkBox.setChecked(arrayList.get(position).ischecked());
switch (arrayList.get(position).getFlag()) {
case "0":
// hasn's seleted any option
if(viewHolder.linearLayout.getVisibility()==View.GONE)
viewHolder.linearLayout.setVisibility(View.VISIBLE);
if(viewHolder.going.getVisibility()==View.GONE)
viewHolder.going.setVisibility(View.VISIBLE);
if(viewHolder.mayBe.getVisibility()==View.GONE)
viewHolder.mayBe.setVisibility(View.VISIBLE);
if(viewHolder.notGoing.getVisibility()==View.GONE)
viewHolder.notGoing.setVisibility(View.VISIBLE);
break;
case "1":
// selected going
viewHolder.going.setVisibility(View.GONE);
viewHolder.notGoing.setVisibility(View.GONE);
viewHolder.mayBe.setVisibility(View.GONE);
Drawable tick = context.getResources().getDrawable(R.drawable.ic_action_tick);
tick.setBounds(0,0, 30, 30);
Button going = new Button(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 40));
params.setMargins(10,0, 10, 4);
going.setLayoutParams(params);
going.setBackgroundColor(context.getResources().getColor(android.R.color.holo_green_dark));
going.setText("Going");
going.setTextSize(15);
going.setTextColor(context.getResources().getColor(R.color.white));
going.setCompoundDrawables(null, null, tick, null);
going.setCompoundDrawablePadding(5);
going.setGravity(Gravity.CENTER);
if(viewHolder.linearLayout!=null)
viewHolder.linearLayout.removeAllViews();
viewHolder.linearLayout.addView(going);
break;
case "2":
// select not going
viewHolder.going.setVisibility(View.GONE);
viewHolder.notGoing.setVisibility(View.GONE);
viewHolder.mayBe.setVisibility(View.GONE);
Drawable cross = context.getResources().getDrawable(R.drawable.ic_action_cancel);
cross.setBounds(0,0, 30, 30);
Button button = new Button(context);
LinearLayout.LayoutParams paramsCross = new LinearLayout.LayoutParams(new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 40));
paramsCross.setMargins(10,0, 10, 4);
button.setLayoutParams(paramsCross);
button.setBackgroundColor(context.getResources().getColor(R.color.red));
button.setText("Not Going");
button.setTextSize(15);
button.setTextColor(context.getResources().getColor(R.color.white));
button.setCompoundDrawables(null, null, cross, null);
button.setCompoundDrawablePadding(5);
button.setGravity(Gravity.CENTER);
if(viewHolder.linearLayout!=null)
viewHolder.linearLayout.removeAllViews();
viewHolder.linearLayout.addView(button);
break;
case "3":
// selected may be
viewHolder.going.setVisibility(View.GONE);
viewHolder.notGoing.setVisibility(View.GONE);
viewHolder.mayBe.setVisibility(View.GONE);
Drawable mayBe = context.getResources().getDrawable(R.drawable.ic_action_emo_err);
mayBe.setBounds(0,0, 30, 30);
Button maybe = new Button(context);
LinearLayout.LayoutParams paramsMaybe = new LinearLayout.LayoutParams(new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 40));
paramsMaybe.setMargins(10,0, 10, 4);
maybe.setLayoutParams(paramsMaybe);
maybe.setBackgroundColor(context.getResources().getColor(R.color.yellow));
maybe.setText("May Be");
maybe.setTextSize(15);
maybe.setTextColor(context.getResources().getColor(R.color.black_overlay));
maybe.setCompoundDrawables(null, null, mayBe, null);
maybe.setCompoundDrawablePadding(5);
maybe.setGravity(Gravity.CENTER);
if(viewHolder.linearLayout!=null)
viewHolder.linearLayout.removeAllViews();
viewHolder.linearLayout.addView(maybe);
break;
case "4":
// event doesn't have any invitatin option
if(viewHolder.linearLayout.getVisibility()==View.VISIBLE)
viewHolder.linearLayout.setVisibility(View.GONE);
break;
}
viewHolder.eventName.setText(arrayList.get(position).getName());
viewHolder.place.setText(arrayList.get(position).getPlace());
viewHolder.time.setText(arrayList.get(position).getTime());
return convertView;
}
static class ViewHolder
{
TextView eventName , place, time;
CheckBox checkBox;
ImageView imageView;
LinearLayout linearLayout;
RippleView going , notGoing , mayBe;
}
}
Bitte helfen Sie mir, ich in dieser schlecht sehr stecke,
add 'convertView = null;' vor 'if (convertView == null)' –
verwenden Sie listview oder recyclerView – Lokesh
versuchen Sie dies http://StackOverflow.com/A/26975256/1765530, Versuchen Sie mit SetTag & getTag für Schaltfläche zu Holen Sie sich die exakte Position – appukrb