GridView,获取Item的父View
GridView, Get Item's parent View
我正在尝试通过单次触摸事件向 GridView
中的子元素发送点击。到目前为止,我可以检索子元素的数据,但无法对其执行点击。
让我再解释一下事物的布局...
GridView
- 在此处触摸事件处理程序...
LinearLayout
- 这里的 onClick 侦听器...
TextView
- 只是一些文本...
一个适配器用 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[位置]);
}
}
我正在尝试通过单次触摸事件向 GridView
中的子元素发送点击。到目前为止,我可以检索子元素的数据,但无法对其执行点击。
让我再解释一下事物的布局...
GridView
- 在此处触摸事件处理程序...LinearLayout
- 这里的 onClick 侦听器...TextView
- 只是一些文本...
一个适配器用 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[位置]);
}
}