我的活动中有一个GridView。我在GridView中有2个元素。一个是ImageView和一个TextView。
我想只在单击ImageView时执行某些操作,请记住我希望在活动中发生这种情况,而不是在GridView适配器中。
现在我有一个适配器,我可以在其中使用ImageView来调用getView()中的click操作,但我不希望这样。我希望在我打电话时不活动,
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this, items));
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//THIS WORKS FINE
String string = ((TextView) v.findViewById(R.id.text)).getText().toString();
Log.d("string",string);
//THE PROBLEM OCCURS HERE
ImageView capture = (ImageView) v.findViewById(R.id.capture);
capture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
//问题在这里发生
当我第一次单击ImageView时,应该发生的操作不会发生。相反,它会在第二次点击时发生。
这是我遇到问题的地方。我希望在第一次点击时发生此操作,而不是第二次点击。
答案 0 :(得分:0)
在您的活动中创建一个方法。
现在,在适配器中,onClick使用
调用该方法((Activityname)context).methodname(parameters);
答案 1 :(得分:0)
您可以看到代码块 -
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
String string = ((TextView) v.findViewById(R.id.text)).getText().toString();
Log.d("string",string);
//THE PROBLEM OCCURS HERE
ImageView capture = (ImageView) v.findViewById(R.id.capture);
capture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
您的imageview 捕获正在点击gridview后添加任何操作。因此,在第一次单击它之后执行,然后将click listener设置为imageview,然后单击其执行其onClick块。更好的是,在适配器内处理imageview点击事件。
您可以从适配器类调用活动内部的方法,但是您应该在适配器类中实现setOnClickListener
。
答案 2 :(得分:0)
在界面的帮助下,你可以做一件事创建一个界面并在你的活动上实现它并获得imageview点击适配器,这里启动界面,你将获得活动内的点击
答案 3 :(得分:0)
我认为问题在于,在第一次点击时,您只需在imageView上设置 OnClickListener
,因此不会调用其onClick()
方法。在第二次单击时,由于已设置侦听器,因此调用onClick()
。
每次点击网格中的某个项目(顺便说一句都没有任何意义)时,您不应该为imageView设置新的监听器,而应该执行以下任一操作:
如果必须以相同的方式处理每个项目中的imageView,请在创建视图时将OnClickListener
设置为适配器中的imageView。
如果没有,请将用于处理imageView单击的界面传递给适配器的构造函数,然后在活动中,在创建适配器时实现此接口。