Android 如何在局部方法中获取视图引用

Android 如何在局部方法中获取视图引用,android,gridview,Android,Gridview,我在网格视图上单击一个图像,并试图递归地隐藏其中的图像,但没有发生。代码到达if语句,但无法隐藏图像 public class GridLayoutActivity extends Activity { GridView gridView; public Integer[] mThumbIds = { R.drawable.right, R.drawable.right, R.drawable.right, R.drawable.

我在网格视图上单击一个图像,并试图递归地隐藏其中的图像,但没有发生。代码到达if语句,但无法隐藏图像

public class GridLayoutActivity extends Activity {

    GridView gridView;
    public Integer[] mThumbIds = {
            R.drawable.right, R.drawable.right,
            R.drawable.right, R.drawable.left,
            R.drawable.left, R.drawable.left,
            R.drawable.left, R.drawable.up,
            R.drawable.left, R.drawable.up,
            R.drawable.down, R.drawable.right,
            R.drawable.up, R.drawable.right,
            R.drawable.up
    };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid_layout);

         gridView = (GridView) findViewById(R.id.grid_view);

        // Instance of ImageAdapter Class
        gridView.setAdapter(new ImageAdapter(this));

        /**
         * On Click event for Single Gridview Item
         * */
        gridView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {

                recursive(position,v);



            }

            private void recursive(int position,View v) {
                // TODO Auto-generated method stub
                /* MobileArrayAdapter adapter=new MobileArrayAdapter(getBaseContext(), position);
                    System.out.println("Adapter set");
                    gridView.setAdapter(adapter);*/
                System.out.println(v);
                String imageName = getResources().getResourceEntryName(mThumbIds[position]);
                System.out.println(imageName);
                /*String up = getResources().getResourceEntryName(mThumbIds[position-3]);
                String down = getResources().getResourceEntryName(mThumbIds[position+3]);
                String right = getResources().getResourceEntryName(mThumbIds[position+1]);
                String left = getResources().getResourceEntryName(mThumbIds[position-1]);
                */
                if(imageName.equalsIgnoreCase("up"))//&&!down.equalsIgnoreCase("down"))
                {
                    Toast.makeText(getApplicationContext(), "UP", Toast.LENGTH_SHORT).show();
                    ImageView imageView=(ImageView)v;
                    imageView.setVisibility(View.INVISIBLE);
                    try{
                    recursive(position-3, v);
                    }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }
                }
                if(imageName.equalsIgnoreCase("down"))//&&!up.equalsIgnoreCase("up"))
                {
                    ImageView imageView=(ImageView)v;
                    imageView.setVisibility(View.INVISIBLE);

                }
                if(imageName.equalsIgnoreCase("left"))//&&!right.equalsIgnoreCase("right"))
                {System.out.println("M HERE");
                    ImageView imageView=(ImageView)v;
                    imageView.setVisibility(View.INVISIBLE);
                }
                if(imageName.equalsIgnoreCase("right"))//&&!left.equalsIgnoreCase("left"))
                {
                    ImageView imageView=(ImageView)v;
                    imageView.setVisibility(View.INVISIBLE);

                }



            }
        });
    }

    /*
    class MobileArrayAdapter extends ArrayAdapter
    {
        Context context2;
        int position ;
        public MobileArrayAdapter(Context context, int textViewResourceId) {
            super(context, textViewResourceId);
            // TODO Auto-generated constructor stub
             position =textViewResourceId;
             context2=context;
        }
        @Override
        public View getView(int positionn, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ImageView imageView = new ImageView(context2);
            imageView.setImageResource(mThumbIds[position]);
            imageView.setVisibility(View.INVISIBLE);


            return super.getView(position, convertView, parent);
        }

    }*/


}
公共类GridLayoutActivity扩展活动{
GridView;
公共整数[]mThumbIds={
R.drawable.right,R.drawable.right,
右,右,右,左,
左,右,左,右,左,
右拉深,左拉深,右拉深,向上,
右拉深,左拉深,右拉深,向上,
可拉下,可拉下,可拉下,对,
拉深,向上,拉深,对,
拉拔
};
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_layout);
gridView=(gridView)findViewById(R.id.grid\u视图);
//ImageAdapter类的实例
setAdapter(新的ImageAdapter(this));
/**
*单个Gridview项目的单击事件
* */
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
递归(位置,v);
}
私有void递归(int位置,视图v){
//TODO自动生成的方法存根
/*MobileArrayAdapter=新的MobileArrayAdapter(getBaseContext(),position);
System.out.println(“适配器集”);
setAdapter(适配器)*/
系统输出打印Ln(v);
字符串imageName=getResources().getResourceEntryName(mThumbIds[position]);
System.out.println(imageName);
/*String up=getResources().getResourceEntryName(mThumbIds[position-3]);
字符串向下=getResources().getResourceEntryName(mThumbIds[position+3]);
字符串right=getResources().getResourceEntryName(mThumbIds[position+1]);
字符串left=getResources().getResourceEntryName(mThumbIds[position-1]);
*/
if(imageName.equalsIgnoreCase(“向上”)/&&!down.equalsIgnoreCase(“向下”))
{
Toast.makeText(getApplicationContext(),“UP”,Toast.LENGTH\u SHORT.show();
ImageView ImageView=(ImageView)v;
imageView.setVisibility(视图.不可见);
试一试{
递归(位置-3,v);
}
捕获(例外e)
{
e、 printStackTrace();
}
}
if(imageName.equalsIgnoreCase(“向下”)/&&!up.equalsIgnoreCase(“向上”))
{
ImageView ImageView=(ImageView)v;
imageView.setVisibility(视图.不可见);
}
if(imageName.equalsIgnoreCase(“左”)/&&!right.equalsIgnoreCase(“右”))
{System.out.println(“这里是M”);
ImageView ImageView=(ImageView)v;
imageView.setVisibility(视图.不可见);
}
if(imageName.equalsIgnoreCase(“右”)/&&!left.equalsIgnoreCase(“左”))
{
ImageView ImageView=(ImageView)v;
imageView.setVisibility(视图.不可见);
}
}
});
}
/*
类MobileArrayAdapter扩展了ArrayAdapter
{
语境2;
内部位置;
公共移动arrayadapter(上下文,int textViewResourceId){
super(上下文,textViewResourceId);
//TODO自动生成的构造函数存根
位置=textViewResourceId;
context2=上下文;
}
@凌驾
公共视图getView(内部位置n、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
ImageView ImageView=新的ImageView(上下文2);
setImageResource(mThumbIds[position]);
imageView.setVisibility(视图.不可见);
返回super.getView(position、convertView、parent);
}
}*/
}

无法以这种方式工作,必须重置适配器如果您确定它输入了if语句,尝试调试您的代码。是的,它在第一个if语句中输入,图像也在hide中单击,然后它转到其递归函数,返回并找到名称,然后进入该if条件,但这次视图对象是旧对象,因此它这次不隐藏图像