मेरे पास सूची दृश्य में कुछ सूची आइटमों में तीन बटन हैं और उस बटन के क्लिक पर मैं उस सूची आइटम का लेआउट बदलना चाहता हूं लेकिन समस्या का सामना करना पड़ रहा है नीचे सूचीबद्ध है ।सूची दृश्य के अंदर बटन स्क्रॉलिंग पर और समस्या पर क्लिक कर रहा है
1)। बटन के क्लिक पर एक और सूची-आइटम लेआउट बदल जाता है। 2)। सूची के स्क्रॉल पर- एक और सूची देखें- आइटम लेआउट बदल जाता है जिसे मैंने क्लिक नहीं किया है।
यहां एडाप्टर क्लास का कोड है।
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;
}
}
कृपया मेरी मदद करो मैं इस में बहुत बुरी तरह से फंस कर रहा हूँ,
ऐड 'convertView = बातिल;' अगर (convertView == नल) ' –
आप सूचीदृश्य या recyclerView – Lokesh
उपयोग कर रहे हैं इससे पहले कि' इस http://stackoverflow.com/a/26975256/1765530 कोशिश, करने के लिए बटन के लिए setTag और getTag उपयोग करने का प्रयास सटीक स्थिति – appukrb