正确的,
不知道您是否对此进行了分类,我已经将一些东西捣碎在一起,我想按您的要求做,如果没有,那么嘿嘿。
我有一个加载到水平滚动条中的活动,这可能不是最好的方式,但它对我有用:
HolderActivity 类(在 HorizontalScrollView 类中加载的类)我有:
int selectedItem;
public boolean onLongClick(View v, int position) {
selectedItem = position;
openContextMenu(v);
return true;
}
public boolean onItemClick(int position) {)//do what you want here on click (press)
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
String[] menuItems = {"Menu item 1 text", "Cancel"};
for (int i = 0; i<menuItems.length; i++) {
menu.add(Menu.NONE, i, i, menuItemsRemove[i]);
}
menu.setHeaderTitle("My menu title");
}
在您的 HorizontalScrollView 类的构造函数中,我通过其中的上下文,如下所示:
public MyScroller(Context context) {
super(context);
this.context = context;
}
我有一种从名为 setFeatureItems 的 ArrayList 创建项目的方法,如下所示:
public void setFeatureItems(ArrayList<MyListEntity> items){}
在此方法中,我添加了一个 GestureDetector,将上下文传递给每个项目,如下所示:
mGestureDetector = new GestureDetector(context, new MyGestureDetector());
并且引用了所有重要的 parentActivity 的 MyGestureDetector 嵌套类是这样的:
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public void onLongPress(MotionEvent arg0) {
parentActivity.onLongClick(MyScroller.this, mActiveFeature);
};
@Override
public boolean onSingleTapUp(MotionEvent arg0) {
parentActivity.onItemClick(mActiveFeature);
return true;
};
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
//right to left
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
int featureWidth = getMeasuredWidth();
mActiveFeature = (mActiveFeature < (mItems.size() - 1))? mActiveFeature + 1:mItems.size() -1;
smoothScrollTo(mActiveFeature*featureWidth, 0);
return true;
}
//left to right
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
int featureWidth = getMeasuredWidth();
mActiveFeature = (mActiveFeature > 0)? mActiveFeature - 1:0;
smoothScrollTo(mActiveFeature*featureWidth, 0);
return true;
}
} catch (Exception e) {
Log.e("Fling", "There was an error processing the Fling event:" + e.getMessage());
}
return false;
}
}
我已经从现有项目中删除了这个,所以可能会有一些我没有让它足够通用的残余,我希望这有意义或有帮助,让我知道如果我可以添加更多细节