2012-11-12 113 views
1

我有一个简单的应用程序,我写的目的是学习来自.Net世界的Java/android的目的。在这个应用程序中,我有一个ListView。 ListView绑定到一个集合并显示所有应该的东西。我有一个下一个&前一个按钮,允许用户导航和这些工作。Android 2.3.3 ListView停止垂直滚动

我想停止的是用户滚动列表的能力。我希望他们使用导航按钮。我认为用户滚动时必须有一些事件会引发。我正要拦截那个事件并且“吞下”它。在查找这些事件时,我遇到了SetScrollContainer(false)。问题在于它看起来并不重要。我仍然可以scroll vertically

所以我最终的疑问是,通过使用SetScrollContainer还是拦截事件或其他选项是如何最好地禁用用户在ListView中滚动?

我也遇到了一个晦涩的文章,说实现一个自定义的ListView,听起来像继承。如果真的需要这种复杂性,我对这个概念感到满意,但不确定对android & java这么新颖吗?

TIA JB

代码如下意见讨论:

//Get a handle on our ListView 
lstvw_LiftData = (ListView)findViewById(R.id.lstvw_LiftData); 

lstvw_LiftData.setOnTouchListener(new OnTouchListener() 
    { 

     public boolean onTouch(View v, MotionEvent event) 
     { 
      if (event.getAction() == MotionEvent.ACTION_MOVE) 
      { 
       return true; // Indicates that this has been handled by you and will not be forwarded further. 
      } 
      return false; 
     } 
    } 
); 

setOnTouchListener error

+0

可能重复:禁用滚动列表视图中(http://stackoverflow.com/questions/7611085/disable-scrolling-in-listview) –

+0

是的,我看到那些。根据我的问题,是否真的必须创建一个自定义ListView对象来禁用滚动,这应该是对象的标准布尔属性? – GPGVM

+0

不,如果您从我以前的评论链接的问题的第二个答案中覆盖了onTouchListener,那么listview的滚动功能将被禁用。如果需要,我也使用这种方法。 –

回答

2

代码我已经写在一个小testproject和对我的作品禁用滚动的列表视图:

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class MainActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ListView lv = (ListView) findViewById(R.id.listV); 
     String[] items = new String[10]; 

     for (int i = 0; i < 10; i++) { 
      items[i] = "Item " + (i+1); 
     } 
     lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items)); 
     lv.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_MOVE) { 
        return true; 
       } 
       return false; 
      } 

     }); 
    } 
} 

玩得开心。