2012-01-13 3 views
0

У меня есть список элементов, которые заполняют список. Когда я нажимаю один раз, на мой сервер отправляется запрос, и я показываю тост при нажатии, а затем еще один тост, когда приходит ответ. Я бы хотел отключить просмотр списка, щелкнув, когда это произойдет. Каков наилучший способ сделать это? Я попробовал простую логическую, но почему-то всегда возвращался в исходное состояние до того, как пришел ответ с сервера. Также попытался отключить элементы макета и не пошел. Предложения?отключить прослушиватель после onclick listview элемент: android

//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? 
} 

ответ

0

Я думаю, что вам лучше всего будет отключить, когда у вас есть // start disable, а затем отключить в вашем RequestTask. Задача запроса, вероятно, выполняется в фоновом режиме в другом потоке. Это означает, что ваш код // end disable? будет выполнен вскоре после создания RequestTask (вероятно, поэтому логическое значение возвращается к разрешению до завершения запроса). Однако, если вы передали задачу запроса ссылку на логическое значение, о котором вы говорили (через конструктор), вы могли бы позволить RequestTask разблокировать, когда его HTTP-запрос завершен.

В основном, дайте RequestTask ссылку на логическое имя, с которым вы работаете, и когда он завершен HTTP-запрос, установите его для включения. В качестве альтернативы, определите функцию в вашей деятельности enableListView() (или, возможно, backgroundRequestComplete()), которая фактически переключает логическое значение на включенное. Затем дайте RequestTask ссылку на вашу деятельность и вызовите метод enableListView() после завершения.

+0

да, это имеет смысл, но я должен быть в состоянии сделать это без ссылки на мое логическое значение в RequestTask нет? Я добавил код, чтобы показать, как я пытался заставить его работать, но он по-прежнему возвращается к false даже до того, как ответ пришел с сервера. Я не понимаю, как это возможно, так как onPostExecute должно произойти в конце (что верно для этого тоста) –

0

Я не совсем уверен, что вы там делали, но что о чем-то вроде:

lv.setOnItemClickListener(null); 

жаль, если я получил ваш вопрос неправильно ..

Смежные вопросы