Предотвращение нескольких касаний после касания элемента в списке - PullRequest
0 голосов
/ 09 июля 2019

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

Это моя деятельность

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{

    private ListView newList;
    private ArrayAdapter<String> newArrayAdapter;

    private MyAsyncTask asyncTask;

    private ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressBar = findViewById(R.id.progressbar);
        newArrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1);
        newList = findViewById(R.id.pairedDevicesListView);
        newList.setOnItemClickListener(this);

    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        newList.setOnItemClickListener(null); //need something like this
        asyncTask = new MyAsyncTask(this);
        asyncTask.execute();

    }

    @Override
    public void onBackPressed() {
        asyncTask.cancel(true);
        super.onBackPressed();

    }


    private class MyAsyncTask extends AsyncTask<Void,Void,Void>{
        Context context; 
        public MyAsyncTask(Context context){
            this.context = context.getApplicationContext();
        }

        @Override
        protected Void doInBackground(Void... voids) {
            // do some stuff
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            progressBar.setVisibility(View.GONE);
            newList.setOnItemClickListener();
            //does not work or I don't know what to pass
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Попробуйте это:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    if (asyncTask == null || asyncTask.getStatus() == AsyncTask.Status.FINISHED) {
        asyncTask = new MyAsyncTask(this);
        asyncTask.execute();
    }
}

Будьте осторожны с onBackPressed, иначе вы можете вызвать функцию для null объекта.

@Override
public void onBackPressed() {
    if (asyncTask != null) {
        asyncTask.cancel(true);
    }
    super.onBackPressed();
}
0 голосов
/ 09 июля 2019

Вы можете написать что-то подобное в вашем onItemClickListener :

newList.setEnabled(false);

А затем в вашем onPostExecute методе написать:

newList.setEnabled(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...