我有一個從ArrayList填充的RecyclerView。輸出是CardView佈局。 在卡片視圖中,其他視圖中有2個按鈕。 他們只需要讀取默認值爲1的TextView的當前值,然後增加或減少它。 Arraylist包含8個項目。ReclyclerView和CardView,onclick方法同時在多個CardView上執行動作
當我運行應用程序的UI工作正常。麻煩的是當我嘗試修改TextView的值時。 在我正在處理的CardView上,該值正確增加和減少,但同時該值在另一個CardView上被修改。在第二個CardView中,修改其TextView值也會修改第一個。
那麼,我做錯了什麼?
這是我的片段:
public class Fragment_rosas extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_rosas,container,false);
RecyclerView recyclerview_rosas;
RecyclerView.Adapter adaptador_rv_rosas;
RecyclerView.LayoutManager lm_rosas;
List rosas = new ArrayList();
rosas.add(new Tropa(1,R.drawable.minibarbaro, getResources().getString(R.string.barbaro),7,1));
recyclerview_rosas = (RecyclerView) view.findViewById(R.id.recyclerView_tropasRosas);
recyclerview_rosas.setHasFixedSize(true);
lm_rosas = new LinearLayoutManager(getContext());
recyclerview_rosas.setLayoutManager(lm_rosas);
adaptador_rv_rosas = new AdaptadorTropa(rosas);
recyclerview_rosas.setAdapter(adaptador_rv_rosas);
return view;
}
}
這裏的代碼在我的適配器部分:
@Override
public void onBindViewHolder(final TropaViewHolder viewHolder, int i) {
viewHolder.imagen.setImageResource(items.get(i).getImagen());
viewHolder.nombre.setText(items.get(i).getNombre());
viewHolder.maxnivel.setText(String.valueOf(items.get(i).getNivelMax()));
viewHolder.espacioencamp.setText((String.valueOf(items.get(i).getEspacioEnCamp())));
final String nombre = items.get(i).getNombre();
final int maxnivel = items.get(i).getNivelMax();
viewHolder.nivelmas.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String niveltemp = viewHolder.nivel.getText().toString();
String nivelmaxtemp = viewHolder.maxnivel.getText().toString();
int nivel = Integer.parseInt(niveltemp);
int maxxnivel = Integer.parseInt(nivelmaxtemp);
int nuevonivel = nivel+1 ;
if (nuevonivel<=maxxnivel) {
viewHolder.txtv_nivel.setText(String.valueOf(nuevonivel));
}
}
});
我OnCreateViewHolder(沒有什麼在這裏發生):
@Override
public TropaViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.cardview, viewGroup, false);
return new TropaViewHolder(v);
}
有2個問題該溶液中。首先,您需要記住每個TextView增加/減少的值,否則,當視圖被回收時,您將始終看到TextView的默認值。其次,您可能需要在onCreateViewHolder中設置點擊偵聽器,以使其更加高效。看到你的onCreateViewHolder會非常有幫助。 – dkarmazi
用我的onCreateViewHolder更新,你可以看到我只是在那裏膨脹佈局。我應該在這裏寫聽衆嗎? –