Ich habe einen benutzerdefinierten Basisadapter, der eine Daten-Arraylist aufnimmt. Von hier aus wird eine Rasteransicht mit benutzerdefinierten Schaltflächen ausgefüllt. Es macht es perfekt und füllt die Gridview. Das Problem ist. Ich möchte eine Schaltfläche zum Ändern der Farben bei Änderung festlegen. Wenn Sie dies tun, wird die nächste Ansicht, die recycelt wird, geändert, da die Ansicht wiederverwendet wird. Ex. Klicken Sie auf Knopf eins an Position 0. Auch Knopf an Position 13 geändert. Jetzt, wenn ich etwas Debugging, finde ich, dass es auch einige der Eigenschaften ändert. Ich frage mich, ob es überhaupt möglich ist, meine Ansicht so zu erstellen, wie ich es sehe, ohne einen Teil der Ansichten recyceln zu müssen.Verhindern Sie, dass der Adapter Ansichten auf Bildlauf verwertet (Bearbeiten Sie das nie.)
Ich habe einige Dinge über die Verwendung von stableIDs gesehen, aber selbst wenn ich es auf True übersteuert habe. Es ändert es derzeit noch nicht.
static class CategoryButtonAdapter extends BaseAdapter
{
private Context mContext;
private ArrayList<DishCategory> dishCategories;
private ArrayList<Dish> dishItems;
static ArrayList<DishCategoryButton> mDishCategoryButtons;
//will take in an array list created in the orderlayout that will be the
//dish category. This will be the from where we will the count for the adapter
public CategoryButtonAdapter(Context context, ArrayList<DishCategory> dishCategories)
{
this.mContext = context;
this.dishCategories = dishCategories;
dishItems = dishCategories.get(0).getDishes();
}
public int getCount()
{
return dishCategories.size();
}
//to be implementated later so it can b3e used to find menu categories
@Override
public DishCategory getItem(int position)
{
return dishCategories.get(position);
}
public void getDishCategoryButtons()
{
if(mDishCategoryButtons.size() == 0)
{
System.out.println("The number of buttons in this adapapter is " + mDishCategoryButtons.size());
}
else
{
System.out.println("The number of buttons in this adapapter is " + mDishCategoryButtons.size());
}
}
public long getItemId(int position)
{
return dishCategories.get(position).getDishCategoryID();
}
@Override
public boolean hasStableIds() {
//return super.hasStableIds(); //To change body of generated methods, choose Tools | Templates.
return true;
}
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
DishCategoryButton button = null;
//button to be created
if(convertView == null)
{
holder = new ViewHolder();
//if it is not recycled, initialize some new attributes
button = new DishCategoryButton(this.mContext,dishCategories.get(position));
button.setLayoutParams(new GridView.LayoutParams(100,100));
button.setPadding(2,2,2,2);
//convertView.setTag(holder);
button.setTag(holder);
}
else
{
//holder = (ViewHolder)convertView.getTag();
button = (DishCategoryButton) convertView;
}
//setButton to the description of the category
//mDishCategoryButtons.add(button);
button.setText((dishCategories.get(position).getDescription()));
//this can be changed later to change the sex appeal of the app
//for now it will be plain
button.setId(position);
//.setOnClickListener(new View.OnClickListener()
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
DishCategoryButton dishCategoryButton = (DishCategoryButton)v;
PaintDrawable drawable = (PaintDrawable) dishCategoryButton.getBackground();
System.out.println("Dish button position is " + dishCategoryButton.getId());
//System.out.println("The position from the array says it is at " + position);
System.out.println("Dish Category is " + dishCategoryButton.getDishCategory().getDescription());
System.out.println("Is it currently selected " + dishCategoryButton.getIsSelected());
int color = drawable.getPaint().getColor();
System.out.println("Color is " + color);
dishCategoryButton.setIsSelected(true);
drawable = (PaintDrawable) dishCategoryButton.getBackground();
color = drawable.getPaint().getColor();
System.out.println("Color is " + color);
System.out.println("hi");
// The toggle is enabled
}
});
//new loadDishItems(categoryButtons.get(position).getDescription()));
return button;
}
Machen Sie sich keine Sorgen um den Ansichtshalter. Das war ein Versuch, das Recycling zu verhindern. Irgendwelche Hinweise oder Ideen, wie man das bekommt?
Hier ist meine Schaltfläche
public class DishCategoryButton extends Button
{
private DishCategory dishCategory = new DishCategory();
private Boolean isSelected = false;
public DishCategoryButton(Context context, DishCategory dishCategory)
{
super(context);
this.dishCategory = dishCategory;
isSelected = false;
setTextColor(Color.WHITE);
setBackgroundDrawable(new PaintDrawable(Color.BLACK));
}
public DishCategory getDishCategory()
{
return dishCategory;
}
public void setDishCategory(DishCategory dishCategory)
{
this.dishCategory = dishCategory;
}
public Boolean getIsSelected() {
return isSelected;
}
public void setIsSelected(Boolean isSelected) {
this.isSelected = isSelected;
if(isSelected == true)
{
setTextColor(Color.WHITE);
setBackgroundDrawable(new PaintDrawable(Color.GREEN));
}
else
{
setTextColor(Color.WHITE);
setBackgroundDrawable(new PaintDrawable(Color.BLACK));
}
}
}
platziert ist nicht es Ansichten für Leistung und smooth scrolling recyceln sollte.Stattdessen müssen Sie Ihre Implementierung von gridview ändern – Raghunandan
Könnten Sie mir erklären, was ich mit der Implementierung machen könnte? – Jesusrz001
http://stackoverflow.com/questions/20611123/listview-subobject-clickable-confilct/20612237#20612237. für Listenansicht. Jetzt können Sie das selbe mit gridview – Raghunandan