【发布时间】:2014-10-08 10:46:14
【问题描述】:
我想在android listview item中实现ontouch和onclicklistener。
如果我选择了行并单击了一行,则需要调用 onclicklistener。
同时如果我左右滑动列表行,需要在适配器文件中调用ontouchlistener。
我该怎么办?请给我一个解决方案?
这里滑动工作正常。但是 onclick 没有从我的代码中调用。
在活动文件中,
class MyUpcomingTouchListener implements OnTouchListener
{
@Override
public boolean onTouch(View v, MotionEvent event) {
ViewHolder1 holder = (ViewHolder1) v.getTag(R.layout.listof_upcoming);
int action = event.getAction();
int position = (Integer) v.getTag();
switch (action) {
case MotionEvent.ACTION_DOWN:
action_down_x = (int) event.getX();
Log.d("action", "ACTION_DOWN - ");
break;
case MotionEvent.ACTION_MOVE:
Log.d("action", "ACTION_MOVE - ");
action_up_x = (int) event.getX();
difference = action_down_x - action_up_x;
break;
case MotionEvent.ACTION_UP:
Log.d("action", "ACTION_UP - ");
calcuateupcomingDifference(holder, position);
action_down_x = 0;
action_up_x = 0;
difference = 0;
break;
}
return true;
}
}
private void calcuateupcomingDifference(final ViewHolder1 holder, final int position) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (difference == 0) {
}
if (difference > 90) {
holder.carudetails.setVisibility(View.GONE);
holder.carucheckin.setVisibility(View.VISIBLE);
holder.caruimage.setVisibility(View.VISIBLE);
upcomingitems.get(position).setVisible(true);
upcominglistAdapter.changeData(upcomingitems);
}
if (difference < -90) {
holder.carudetails.setVisibility(View.VISIBLE);
holder.carucheckin.setVisibility(View.GONE);
holder.caruimage.setVisibility(View.GONE);
upcomingitems.get(position).setVisible(true);
upcominglistAdapter.changeData(upcomingitems);
}
}
});
}
从适配器文件,
convertView.setOnTouchListener(mOnTouchListener);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(TodayList.this,
DetailPage.class);
startActivity(intent);
}});
【问题讨论】:
-
你是要对代表List行的所有View执行onClick,还是对行的某个特殊项执行onClick?
-
我需要在列表的选定行上执行 onclick() 功能。
-
在列表视图项上使用手势监听器,它将同时提供触摸和点击监听器..
标签: android android-listview swipe baseadapter ontouchlistener