klickte ich für die Anzeige Liste der Elemente eine Android-Anwendung entwickle dies ist mein Code:ändern Hintergrundfarbe von ViewItem in RecyclerView.Adapter, wenn ein anderes Element
public class CategoryAdapter extends
RecyclerView.Adapter<CategoryAdapter.CategoryAdapterViewHolder> {
private String[] categoriesData;
private int numberOfCategories;
private CategoriesListListener cOnClickListener;
public interface CategoriesListListener {
void onCategoryItemClick(int categoryItemIndex, int height, int width,
View view);
}
public CategoryAdapter(int numberOfCategories, CategoriesListListener listener) {
this.numberOfCategories = numberOfCategories;
cOnClickListener = listener;
}
public class CategoryAdapterViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener{
public final TextView categoryTextView;
public int adapterCounter;
public CategoryAdapter categoryAdapter;
public void setCounter(int counter){
adapterCounter = counter;
}
public void setCategoryAdapter(CategoryAdapter categoryAdapter){
this.categoryAdapter = categoryAdapter;
}
public CategoryAdapterViewHolder(View view) {
super(view);
categoryTextView = (TextView) view.findViewById(R.id.category_name);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view){
int clickedPosition = getAdapterPosition();
int height = view.getHeight();
int width = view.getWidth();
cOnClickListener.onCategoryItemClick(clickedPosition, height, width, view);
}
}
@Override
public CategoryAdapterViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
Context context = viewGroup.getContext();
int layoutIdForListItem = R.layout.category_item;
LayoutInflater inflater = LayoutInflater.from(context);
boolean shouldAttachToParentImmediately = false;
View view = inflater.inflate(layoutIdForListItem, viewGroup, shouldAttachToParentImmediately);
CategoryAdapterViewHolder categoryAdapterViewHolder = new CategoryAdapterViewHolder(view);
categoryAdapterViewHolder.setCounter(getItemCount());
categoryAdapterViewHolder.setCategoryAdapter(this);
return categoryAdapterViewHolder;
}
@Override
public void onBindViewHolder(CategoryAdapterViewHolder forecastAdapterViewHolder, int position) {
String currentCategory = mCategoriesData[position];
forecastAdapterViewHolder.categoryTextView.setText(currentCategory);
}
@Override
public int getItemCount() {
if (null == mCategoriesData) return 0;
return mCategoriesData.length;
}
public void setCategoriesData(String[] categoriesData) {
this.mCategoriesData = categoriesData;
notifyDataSetChanged();
}
}
wenn ein Artikel der Rückruf des Zuhörers angeklickt wird dies genannt wird Listener wird von einem Fragment
implementiert, die verstreicht, um eine Instanz der sich auf die oben CategoryAdapter
public class CategoriesFragment extends Fragment implements
CategoryAdapter.CategoriesListListener {
//some code here
public interface OnCategoryClickListener{
public void onCategoryClick(int position, String name, String
description,int height, int width, View view);
}
//some code here
@Override
public void onCategoryItemClick(int categoryItemIndex,int height, int
width, View view) {
cCallback.onCategoryClick(categoryItemIndex,
categoriesName[categoryItemIndex],
categories[categoryItemIndex], height, width, view);
}
}
Dann wird die Activity
implementiert, um die im Inneren des interface
Fragment
public class MainActivity extends AppCompatActivity implements
CategoriesFragment.OnCategoryClickListener{
//some code here
@Override
public void onCategoryClick(int position, String name, String
description, int height, int width, View view){
//some code here
int finalRaduis = (int)Math.hypot(height/2, width/2);
Animator animator =
ViewAnimationUtils.createCircularReveal(view, width/2, height/2, 0,
finalRaduis);
view.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),
R.color.colorAccent2));
animator.start();
//some code here
}
Dann im ManActivity
nach den view
klicken änderte ich erfolgreich die Hintergrundfarbe der Ansicht, aber das Problem kommt, wenn eine neue Ansicht in diesem Fall angeklickt wird die zuvor angeklickt view
‚s Hintergrundfarbe doesn‘ t wechseln Sie zum Standard.
Frage Wie soll ich meinen Code ändern, sodass beim Klicken auf eine neue Ansicht die zuvor angeklickte eine Farbe in die Standardfarbe wechselt?
das ist richtig, aber wie Blick vom Adapter erhalten, wenn nur die Position, die ist es eine Methode implementiert für diesen Zweck? – Siavosh
Sie sollten root layout/view in CategoryAdapterViewHolder und hinzufügen click listener innerhalb bind view holder method und entfernen beim klicken von CategoryAdapterViewHolder klasse – Praveen
können sie bitte ihre lösung in mehr details und ändern sie meinen code, ich bin immer noch verwirrt wie man eine ansicht Artikel Form Adapter durch seine Position – Siavosh