ListView onTouch无法单击

时间:2014-08-21 03:28:18

标签: android listview ontouchlistener

我有这个类和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;
    }
}

4 个答案:

答案 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();

                      }

                 });

enter image description here

答案 1 :(得分:1)

这是workin code..use it..cheers ..:)

enter image description here

    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!
    }
});