onclick listview元素后禁用监听器:android

时间:2012-01-13 19:05:30

标签: android listview toast

我有一个填充列表视图的元素列表。当我点击一次时,会向我的服务器发出一个请求,然后我会在点击时显示一个toast,然后在响应进入时显示另一个toast。我想在发生这种情况时禁用listview进行点击。最好的方法是什么?我尝试了一个简单的布尔值但不知怎的,它总是在服务器的响应进入之前返回到其原始状态。还尝试禁用布局元素,并且不会去。建议?

//beginning of my FirstClass
static boolean wait = false;

//...some code

setListAdapter(new ArrayAdapter<String>(this, R.layout.main, arraylist));

        lv.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if(!wait){
                    wait = true;
                    Toast.makeText(getApplicationContext(), "Processing...",Toast.LENGTH_SHORT).show();
                    String URL = "myurl";
                    new RequestTask(getApplicationContext()).execute(URL);
               }
            }
        });

然后在我的RequestTask类

@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    Toast.makeText(this.context, result,Toast.LENGTH_SHORT).show();
    FirstClass.wait = false; // turn it back to false?
}

2 个答案:

答案 0 :(得分:0)

我认为您最好的选择是禁用// start disable的位置,然后在RequestTask中禁用。请求任务可能在后台执行不同的线程。这意味着您的// end disable?代码将在创建RequestTask后立即执行(这可能是在请求完成之前布尔值返回启用的原因)。但是,如果您通过请求任务传递了您正在讨论的布尔值(通过构造函数),则可以允许RequestTask在其HTTP请求完成时解锁。

基本上,给RequestTask一个对你正在使用的布尔值的引用,当它的HTTP请求完成时,将它设置为启用。或者,在您的活动enableListView()(或可能是backgroundRequestComplete())中定义一个函数,该函数实际上将布尔值切换为启用。然后为RequestTask提供对您的活动的引用,并在完成时调用enableListView()方法。

答案 1 :(得分:0)

我不完全确定你在那里做了什么,但是如下:

lv.setOnItemClickListener(null);

对不起,如果我的问题出错了。