GridView,获取Item的父View

GridView, Get Item's parent View

我正在尝试通过单次触摸事件向 GridView 中的子元素发送点击。到目前为止,我可以检索子元素的数据,但无法对其执行点击。

让我再解释一下事物的布局...

一个适配器用 LinearLayout 填充了 GridView,他们定义了 onClick 事件。这些布局包含 TextView,其中 TextView.setText("Some data from my dataset")

我有一个 onTouch 侦听器,它当前正在侦听 GridView 上的触摸事件,并且正在根据手指的位置成功找到 TextView 的数据。

如何获取TextView的父视图,并在用户手指位置调用performClick?

这是当前的点击处理程序,包含我目前所获得的... 假设 GridView & Adapter 已正确初始化...

@Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = MotionEventCompat.getActionMasked(event);
            switch(action)
            {
            case (MotionEvent.ACTION_DOWN) :
            case (MotionEvent.ACTION_MOVE) :
                int position = GridView.pointToPosition((int)event.getX(),(int)event.getY());
                if (position != -1)
                {
                // I have looked at the other .get methods, and doing GridView.getXYZ (Where XYZ could be any method) and couldn't get anywhere...
                String item = Adapter.getItem(position);                    
                Log.d("TouchEvent","Action was DOWN/MOVE on " + item);
                return true;
                }
            case (MotionEvent.ACTION_UP) :
                Log.d("TouchEvent","Action was UP");
                return true;
            case (MotionEvent.ACTION_CANCEL) :
                Log.d("TouchEvent","Action was CANCEL");
                return true;
            case (MotionEvent.ACTION_OUTSIDE) :
                Log.d("TouchEvent","Movement occurred outside bounds " +
                        "of current screen element");
                return true;      
            default : 
                return true;
            }
        }
    });

谢谢!

还想提一下,这个 GridView 包含在一个片段中。我怀疑它会改变世界,但可能会影响你们的解决方案。

啊啊……我们需要尝试一下,

实现方法如

private View getViewByPosition(GridView gridView, int position) {
    int firstPosition = gridView.getFirstVisiblePosition();
    int lastPosition = gridView.getLastVisiblePosition();

    if ((position < firstPosition) || (position > lastPosition))
        return null;

    return gridView.getChildAt(position - firstPosition);
}

现在,调用这个方法,

if (position != -1)
{
    // I have looked at the other .get methods, and doing                  GridView.getXYZ (Where XYZ could be any method) and couldn't get anywhere...
    GridView gridView = (GridView) v;
    View touchedView = getViewByPosition(gridView, position);

    String item = Adapter.getItem(position);                    
    Log.d("TouchEvent","Action was DOWN/MOVE on " + item);
    return true;
}

试试这个

gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int 位置,长 id)
{
// 将意图发送到 SingleViewActivity
Intent i = new Intent(getApplicationContext(), SingleViewActivity.class);
// 传递图像索引
i.putExtra("id",位置);
开始Activity(i);
}
});



在此之后创建 SingleViewActivity.java class

public class SingleViewActivity 扩展 Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.single_view);

// 获取意图数据
Intent i = getIntent();
// 选中的图片id
int position = i.getExtras().getInt("id");
ImageAdapter imageAdapter = new ImageAdapter(this);
ImageView imageView = (ImageView) findViewById(R.id.SingleView); imageView.setImageResource(imageAdapter.mThumbIds[位置]);
}
}