当我无法在此声明全局变量时,如何从此视图中获取位置?
方法GetView()有一个名为position的变量,但我无法做到这一点因为在getView()和onClickListener()中都被操作了。
这意味着当我的列表的每一行都被创建时,我将丢失对前一个按钮的引用,而不是新按钮
当单击任何Button并激发侦听器时,我的逻辑将仅发生在使用getView()创建的最后一行,而不一定是单击的行。
@Override
public void onClick(View view) {
ToggleButton fav = (ToggleButton) view;
if(!Checked[pos]) {
Toast.makeText(customView.getContext(),"ON in Posicion: "+pos,Toast.LENGTH_SHORT).show();
fav.setBackgroundDrawable(ContextCompat.getDrawable(customView.getContext(), R.drawable.like));
Checked[pos]=true;
} else {
Toast.makeText(customView.getContext(),"OFF in Posicion: "+pos,Toast.LENGTH_SHORT).show();
fav.setBackgroundDrawable(ContextCompat.getDrawable(customView.getContext(), R.drawable.dislike));
Checked[pos] = false;
}
}
答案 0 :(得分:0)
您的问题有两种方法。
在将数据绑定到视图时的Adapter
类中。使用View#setTag()
方法并传递toggleButton.setTag(position)
之类的位置,当您使用onClick()
方法接收视图时,可以使用toggleButton.getTag()
在第二种方法中,创建一个接口并将其传递给适配器,在适配器类的getView中,在将数据绑定到视图时添加一个onggleButton上的侦听器,每当用户单击ToggleButton时,只需调用接口的方法你刚刚过去了。
Snippet就像:
public interface IToggleButtonListener{
void onToggleButtonClicked(ToggleButton button, int position);
}
活动如下:
public class MainActivity extends Activity implements IToggleButtonListener{
@Override
void onCreate(Bundle saveInstance){
Adapter adapter = new Adapter(this, this//toggleListener);
listView.setAdapter(adapter);
}
@Override
void onToggleButtonClicked(ToggleButton button, int position){
//Your code goes here
}
}
适配器类如:
public class Adapter extends BaseAdapter{
private IToggleButtonListener mListener ;
public Adapter(Activity activity, IToggleButtonListener listener){
mListener = listener;
}
....
....
@Override
public View getView(int pos){
//..Bind your data to view
toggleButton.setOnClickListener(new View.OnClickListener(){
void onClicke(View view){
if(mListener !=null){
mListener.onToggleButtonClicked(view,pos);
}
}
}
);
}
}
抱歉格式化。
由于