我有一个实现 OnItemClickListener
、OnItemLongClickListener
并显示 ListView 的 Activity 。我在我的列表适配器类中添加了一个 OnTouchListener
以便用户可以在 ListView 项上滑动。但是当我运行我的应用程序时, ListView 项目上的滑动有效,但 onItemClick
和 onItemLongClick
不再有效。但是,如果我从适配器中删除 OnTouchListener
,则 itemclick 和 itemlongclick 会起作用。
这是我的代码
我的 Activity
public class InterActivity extends Activity implements
OnItemClickListener, OnItemLongClickListener
{
ListView listview;
List<ParseObject> ob;
AlertDialog dialog;
ProgressDialog mProgressDialog;
FinalAdapter adapter;
TestAdapter tstapter;
List<CodeList> codelist = null;
SharedPreference shrdPreference;
private int limit = 15;
GestureDetectorCompat mDetector;
View footerView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.inter_layout);
shrdPreference = new SharedPreference();
//Execute RemoteDataTask AsyncTask
new RemoteDataTask().execute();
}
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
//my remote data task to perform async task//
}
@Override
public void onItemClick(AdapterView<?> p1, View view, int position, long p4)
{
intent.putExtra("codetext",
(codelist.get(position).getFinalCodeText()));
// Start SingleItemView Class
startActivity(intent);
}
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, long arg3)
{
//my method to perform when item is long pressed
}
@Override
protected void onResume()
{
super.onResume();
}
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
}
}
我的列表适配器的 getview()
@Override
public View getView(final int position, View view, ViewGroup parent)
{
final ViewHolder holder;
if(view == null){
holder = new ViewHolder();
view = inflater.inflate(R.layout.listitem,null);
holder.contaainer = (RelativeLayout) view.findViewById(R.id.container);
holder.listHeading = (TextView) view.findViewById(R.id.beg_list_itemTextView);
holder.listHash = (TextView) view.findViewById(R.id.listview_hashtags);
holder.alphabetList = (ImageView) view.findViewById(R.id.beg_list_itemImageView);
holder.favariteImage = (ImageView) view.findViewById(R.id.favbtn);
holder.mDetector = new GestureDetectorCompat(context, new MyGestureListener(context, view));
view.setTag(holder);
}else{
holder = (ViewHolder) view.getTag();
}
CodeList codes = (CodeList) getItem(position);
holder.listHeading.setText(codeList.get(position).getListHeading());
holder.listHash.setText(codeList.get(position).getListHashText());
imageLoader.DisplayImage(codeList.get(position).getAlphabetimg(),
holder.alphabetList);
holder.contaainer.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
holder.mDetector.onTouchEvent(event);
return true;
}
});
return view;
}
最佳答案
当您设置自定义 OnTouchListener
时,您将拦截触摸事件,从而覆盖处理正常点击事件的默认触摸处理程序。
如果您想允许默认的点击事件,您必须在您的onTouch()
实现中返回false
,让事件传递给默认处理程序。
holder.contaainer.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
holder.mDetector.onTouchEvent(event);
return false;
}
});
关于android - 当在项目上激活触摸监听器时单击不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34694607/