Обнаружение внешнего файла в ListView - PullRequest
0 голосов
/ 23 января 2019

Я использую listview для заполнения списка лекций (368 лекций), доступных для скачивания.

Показывает текст «Загрузить» для лекций, которые недоступны в автономном режиме.

Для доступных лекций я делаю проверку внешнего файла, а затем обновляю текст "Скачать" в "Офлайн", но он не работает нормально в ListView и значения повторяются.

Вот мой код для метода getView

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;

        if (convertView == null) {
            view = inflater.inflate(R.layout.customlistview, null);
        } else {
            view = convertView;
        }

        TextView number = view.findViewById(R.id.lec_number);
        TextView title = view.findViewById(R.id.lec_title);
        TextView url = view.findViewById(R.id.url);
        TextView filename = view.findViewById(R.id.filename);
        // Textview  I want to update, contains "Download" text
        TextView download_text = view.findViewById(R.id.download_text);

        HashMap<String, String> mList = new HashMap<>();
        mList = List.get(position);

        number.setText(mList.get("number"));
        title.setText(mList.get("title"));
        url.setText(mList.get("url"));
        filename.setText(mList.get("file"));


        // File check that I'm doing
        File externalFile = new File(Environment.getExternalStorageDirectory() + "/Lectures By Sarfaraz A Shah Sb/" + mList.get("file"));
        if(externalFile.exists()) {
            download_text.setText("Available");
        }


        return view;


    }

Вот мой вывод:

Снимок экрана ListView

ListView (продолжение)

1 Ответ

0 голосов
/ 23 января 2019

Android повторяет просмотры.Когда это происходит, разработчик должен позаботиться о том, чтобы мусор из переработанного представления не переносился.

Если параметр convertView в getView() не равен нулю, возможно, он имеет ранее установленные значения.В этом случае вы должны очистить их перед отображением представления, иначе будет показан мусор.В общем, вы должны всегда устанавливать значения для каждого представления в getView().

Например, вы можете сделать что-то вроде этого:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    // ...

    if (externalFile.exists()) {
        download_text.setText("Available");
    } else {
        // Set any text you want to show,
        // or just clear the view like this.
        download_text.setText("");
    }

    return view;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...