1

我有一个简单的应用程序,用于学习来自 .Net 世界的 Java / android。在这个应用程序中,我有一个 ListView。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 错误

4

1 回答 1

2

我在一个小测试项目中编写的代码可用于禁用列表视图的滚动:

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

        });
    }
}

玩得开心。

于 2012-11-12T15:38:43.613 回答