如何从视图中获取位置?

时间:2017-08-27 10:27:52

标签: android

当我无法在此声明全局变量时,如何从此视图中获取位置? 方法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;
    }

}

1 个答案:

答案 0 :(得分:0)

您的问题有两种方法。

  1. 在将数据绑定到视图时的Adapter类中。使用View#setTag()方法并传递toggleButton.setTag(position)之类的位置,当您使用onClick()方法接收视图时,可以使用toggleButton.getTag()

  2. 轻松获取位置
  3. 在第二种方法中,创建一个接口并将其传递给适配器,在适配器类的getView中,在将数据绑定到视图时添加一个onggleButton上的侦听器,每当用户单击ToggleButton时,只需调用接口的方法你刚刚过去了。

  4. 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);
    }
    }
    }
    );
    }
    }
    

    抱歉格式化。

    由于