Reputation: 553
I have an activity which implements OnItemClickListener
, OnItemLongClickListener
and displays a listview. I have added an OnTouchListener
in my list adapter class so that user can swipe on the listview item. But when I run my app the swipe on the list view item works but onItemClick
and onItemLongClick
no longer work. But if I remove OnTouchListener
from my adapter the itemclick and itemlongclick works.
Here's my code
myactivity
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() of my list adapter
@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;
}
Upvotes: 3
Views: 1569
Reputation: 33904
When you set a custom OnTouchListener
you are intercepting touch events and thus overriding the default touch handler that handles normal click events.
If you want to allow the default click events, you have to return false
in your onTouch()
implementation, to let the events pass through to the default handler.
holder.contaainer.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
holder.mDetector.onTouchEvent(event);
return false;
}
});
Upvotes: 2