这是我在这里粘贴的示例代码 . 我真正想要的是在MainActivity中创建一个项目列表 . 我已经使用了GridView,因为很容易设置你想连续显示多少项 . 在它们之间创建间距也很容易 .
我的目标是在GridView的Item中的ImageView中的Long Press位置打开一个ArcLayout . 因此,我注册了OnTouchListener(以获取触摸位置)和OnLongClickListener(以便在长按时将ArcLayout定位到该位置) .
这似乎适用于除GridView中第一项之外的所有项目 . 出于某种原因onLongClick方法在长按仅用于GridView中的“First Item”时不被调用 .
这看起来很怪异 . 我无法弄清楚为什么“onTouch”正在为“GridView”中唯一的第一项消耗“ACTION_DOWN”事件,而不是传递给“onLongClick方法” .
以下是示例应用程序示例应用程序的链接您可以在Log.d“适配器”中看到,未检测到GridView中第一项的LongClick .
Does registering both OnTouchListener and OnLongClickListener to the same View cause any conflict?
主要活动
public class MainActivity extends AppCompatActivity {
private GridView gridView;
private GridViewAdapter gridViewAdapter;
private ArrayList<Integer> lstIds;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView) findViewById(R.id.grid_view);
lstIds = new ArrayList<Integer>();
lstIds.add(R.drawable.img_burger);
lstIds.add(R.drawable.img_ham_burger);
lstIds.add(R.drawable.img_pancakes);
lstIds.add(R.drawable.img_pizza);
gridViewAdapter = new GridViewAdapter(this, lstIds);
gridView.setAdapter(gridViewAdapter);
}
}
GridView的BaseAdapter
// GridViewAdapter.java
public class GridViewAdapter extends BaseAdapter implements View.OnLongClickListener, View.OnTouchListener {
// Instance Variables
private final String TAG = "Adapter";
private Context context;
private ArrayList<Integer> lstImg;
private int resId;
// CONSTRUCTOR
public GridViewAdapter(Context context, ArrayList<Integer> lstImg) {
this.context = context;
this.lstImg = lstImg;
}
// Overridden Methods
@Override
public int getCount() {
return lstImg.size();
}
@Override
public Object getItem(int position) {
return lstImg.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item_layout, parent, false);
}
ImageView imgItem = (ImageView) convertView.findViewById(R.id.img_view);
resId = lstImg.get(position);
imgItem.setImageResource(resId);
// Enabling the ImageView to be Long Clickable...
// imgItem.setLongClickable(true);
imgItem.setOnTouchListener(this);
imgItem.setOnLongClickListener(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 250);
convertView.setLayoutParams(params);
return convertView;
}
@Override
public boolean onLongClick(View v) {
Log.d(TAG, "onLongClick called...");
Toast.makeText(context, "Long Click!", Toast.LENGTH_SHORT).show();
return false;
}
@Override
public boolean onTouch(View v, final MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Log.d(TAG, "onTouch ACTION_DOWN event...");
}
return false;
}
}