我有ListView
以下Adapter
:
public class gestionAdapter extends ArrayAdapter<Sav> {
public gestionAdapter(Context context, List<Sav> savs){
super(context, 0, savs);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.adapter_gestion,parent, false);
}
Sav sav = getItem(position);
ViewHolderGestion viewHolder = (ViewHolderGestion) convertView.getTag();
if(viewHolder == null){
viewHolder = new ViewHolderGestion();
viewHolder.titreSav = (TextView) convertView.findViewById(R.id.TitreSav);
viewHolder.intervenant = (TextView) convertView.findViewById(R.id.interv);
viewHolder.client = (TextView) convertView.findViewById(R.id.cli);
viewHolder.archive = (Button) convertView.findViewById(R.id.archive);
viewHolder.actif = (Button) convertView.findViewById(R.id.actif);
convertView.setTag(viewHolder);
viewHolder.archive.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "archive ", Toast.LENGTH_LONG).show();
}
});
viewHolder.actif.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "actif ", Toast.LENGTH_LONG).show();
}
});
}
viewHolder.titreSav.setText(sav.getTitre());
viewHolder.intervenant.setText(sav.getIntervenant());
viewHolder.client.setText(sav.getNomClient());
return convertView;
}
}
正如您所注意到的,每行有两个buttons
。目前,我已将听众置于Adapter
但是可以将这些听众放在接收视图中,所以我可以使用这些按钮刷新我的视图吗?
目前我已尝试将我的View的一些功能公之于众,但我对此解决方案一点也不满意。
答案 0 :(得分:0)
首先要提一下你的viewHolder模式是不正确的,请看here。
第二件事是,如果你想访问你的rootLayout内部活动最简单的方法是在你的适配器中定义Listener,然后在你的Activity中通知它。
例如,在适配器中定义以下接口并在适配器中创建实例:
private OnBackClickListener onBackClickListener;
public interface OnBackClickListener {
void onBackClick();
}
然后当你的rootLayout按照方法点击你的适配器调用时:
rootView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if (onBackClickListener != null) {
onBackClickListener.onBackClick();
}
}
});
在您的活动中,将此侦听器传递给您的适配器,如下所示:
MyAdapter adapter = new MyAdapter(context,new OnBackClickListener(){//rest of things});
现在,在您的活动中,当rootLayout点击适配器的OnBackClickListener
通知您时。
如果是RecyclerView
,您可以找到完整的实施here。
答案 1 :(得分:0)
您可以将监听器添加到您的活动中,但您无法指出哪个视图已被点击。相反,您可以这样做
public static class ViewHolderTwo extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView dictionaryWord;
private TextView dictionaryShortcut;
private CheckBox deleteWord;
public interface Listener
{ public void viewOneclicked();
public void viewTwoClicked();
}
private Listener mListener;
public ViewHolderTwo(View v,Listener listener) {
super(v);
this.mListener = listener;
dictionaryWord = (TextView) v.findViewById(R.id.dictionaryWord);
dictionaryShortcut = (TextView) v.findViewById(R.id.dictionaryShortcut);
deleteWord = (CheckBox) v.findViewById(R.id.deleteWord);
}
@Override
public void onClick(View v) {
if(v == dictionaryWord)
{
mListener.viewOneClicked();
return;
}
}
并使您的活动实现侦听器并在视图构造函数
中传递其引用