安卓大神告诉我怎么让ListView的点击事件(不是item的点击事件,屏蔽掉item的点击事件,就点击ListView本身)和上下滑动事件共存。
请参考:
package com.wps.android;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class Layouts extends Activity {
/** Called when the activity is first created. */
private ListView mylistview;
private ArrayList list = new ArrayList();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mylistview = (ListView)findViewById(R.id.listview);
list.add("LinearLayout");
list.add("AbsoluteLayout");
list.add("TableLayout");
list.add("RelativeLayout");
list.add("FrameLayout");
ArrayAdapter myArrayAdapter = new ArrayAdapter
(this,android.R.layout.simple_list_item_1,list);
mylistview.setAdapter(myArrayAdapter);
/*mylistview.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
mylistview.setBackgroundColor(Color.BLUE);
}
return false;
}
});*/
mylistview.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
if(list.get(arg2).equals("LinearLayout"))
{
Intent intent = new Intent("com.wps.android.LINEARLAYOUT");
startActivity(intent);
}
if(list.get(arg2).equals("AbsoluteLayout"))
{
Intent intent = new Intent("com.wps.android.ABSOLUTELAYOUT");
startActivity(intent);
}
if(list.get(arg2).equals("TableLayout"))
{
Intent intent = new Intent("com.wps.android.TABLELAYOUT");
startActivity(intent);
}
if(list.get(arg2).equals("RelativeLayout"))
{
Intent intent = new Intent("com.wps.android.RELATIVELAYOUT");
startActivity(intent);
}
if(list.get(arg2).equals("FrameLayout"))
{
Intent intent = new Intent("com.wps.android.FRAMELAYOUT");
startActivity(intent);
}
}
});
}
}
重写ListVIew组件,然后在滑动事件中判断移动距离,再来判断是滑动还是点击
跟你说个简单的
把ListView 中 item 的点击动画给取消了并且不要让 item 中的控件能够获得焦点拦截点击事件
然后将onItemClickListener当作onClickListener处理就好了。效果妥妥的!!
不行的,运行报错, Caused by: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
at android.widget.AdapterView.setOnClickListener(AdapterView.java:783)
你理解错我的意思了,不要用 setOnClickListener
这是一个比较取巧的行为
item 中如果有 Button,EditText这些可以获得焦点的控件的话,你点击Item 的时候点击事件会被拦截掉,也就不会调用onItemClick了
为了不让获得焦点可以这样做:(蓝色选中的内容)
事件分发的处理,在listview的dispachTouchEvent中直接return true;
有这样需求啊,好说,一个简单的重写就能解决问题。
继承ListView
使用的时候
这是 ListView 调用的setOnClickListener的源码,直接就抛异常了,所以自定义类重写setOnClickListener的时候就不要调用super的了。
我可以问一下,你这么做的目的何在吗?为何会有这种奇怪的需求?
既然你都知道源码中写了,抛出的异常信息的意思是,“不要试图给AdapterView及其子类添加OnClickListener”,这说明谷歌官方都不允许你这么做。
如果你觉得我说的不对,那么你无视这条回复好了