отключить прослушиватель после нажатия на элемент списка: android - PullRequest
0 голосов
/ 13 января 2012

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

//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 голосов
/ 13 января 2012

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

lv.setOnItemClickListener(null);

извините, если я неправильно понял ваш вопрос ..

0 голосов
/ 13 января 2012

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

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

...