我有这个类和XML
public class MyClass extends SherlockListActivity implements OnTouchListener
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:smoothScrollbar="true"
android:cacheColorHint="#fff"
android:fastScrollEnabled="false"
android:clickable="true"
android:layout_weight="1"
android:dividerHeight="1sp" />
我无法检测到点击。注册点击的唯一方法是拖动。我不明白这是什么问题。
getListView().setOnTouchListener(this);
这是我的onTouch:
public boolean onTouch(View v, MotionEvent event)
{
Log.i("Click", "MAIN");
switch (event.getAction() & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
...
获取任何日志的唯一方法是(或操作)是通过拖动。我尝试点击并长按,没有效果。知道如何解决这个问题并保持onTouch?
编辑: 列表视图使用不同的ArrayAdapter实现(我自己的):
public class ContentDisplayListAdapter extends ArrayAdapter<DataContentsInfo> {
private List<DataContentsInfo> items;
private DataContentsInfo o;
public ContentDisplayListAdapter(Context context, int textViewResourceId, List<DataContentsInfo> items) {
super(context, textViewResourceId, items);
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v == null) {
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.content_display_row, null);
}
o = items.get(position);
if(o != null) {
TextView content = (TextView) v.findViewById(R.id.content);
TextView DataNo = (TextView) v.findViewById(R.id.title_no);
ContentDisplayAdapter.updateTitles(getContext(), o, content, DataNo, items.size());
}
return v;
}
}
答案 0 :(得分:3)
这对你有用:)
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// ListView Clicked item index
int itemPosition = position;
// ListView Clicked item value
String itemValue = (String) listView.getItemAtPosition(position);
// Show Alert
Toast.makeText(getApplicationContext(),
"Position :"+itemPosition+" ListItem : " +itemValue , Toast.LENGTH_LONG)
.show();
}
});
答案 1 :(得分:1)
这是workin code..use it..cheers ..:)
public class ListViewAndroidExample extends Activity {
ListView listView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view_android_example);
// Get ListView object from xml
listView = (ListView) findViewById(R.id.list);
// Defined Array values to show in ListView
String[] values = new String[] { "Android List View",
"Adapter implementation",
"Simple List View In Android",
"Create List View Android",
"Android Example",
"List View Source Code",
"List View Array Adapter",
"Android Example List View"
};
// Define a new Adapter
// First parameter - Context
// Second parameter - Layout for the row
// Third parameter - ID of the TextView to which the data is written
// Forth - the Array of data
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
// Assign adapter to ListView
listView.setAdapter(adapter);
// ListView Item Click Listener
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// ListView Clicked item index
int itemPosition = position;
// ListView Clicked item value
String itemValue = (String) listView.getItemAtPosition(position);
// Show Alert
Toast.makeText(getApplicationContext(),
"Position :"+itemPosition+" ListItem : " +itemValue , Toast.LENGTH_LONG)
.show();
}
});
}
}
答案 2 :(得分:0)
使用setOnItemClickListener(),无论点击的项目如何工作,该方式列表也可以点击,因为可以重新点击列表被点击
答案 3 :(得分:0)
如果您不关心列表视图中任何元素的单击或列表视图本身,那么您可以使用点击监听器。像下面这样......
首先,我们需要OnItemClickListener
的子类,仅在双击时触发:
public abstract class DoubleClickListener implements OnItemClickListener {
// time between clicks before it is no longer considered a double click
private static final long DOUBLE_CLICK_TIME_DELTA = 200;
private long mLastClickTime = 0;
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// check if this click occurred shortly after a previous click
long clickTime = System.currentTimeMillis();
if (clickTime - mLastClickTime < DOUBLE_CLICK_TIME_DELTA) {
onDoubleClick(view);
}
// save the time of this click for comparing against future clicks
mLastClickTime = clickTime;
}
// override this function with desired behavior
public abstract void onDoubleClick(View view);
}
现在将我们的新类的实例设置为listview的click侦听器:
ListView listView = getListView();
listView.setOnItemClickListener(new DoubleClickListener() {
@Override
public void onDoubleClick(View v) {
// TODO - handle our double click here!
}
});