Установить все элементы для просмотра списка из файла .txt (ArrayList), который содержит значение textview [Android Java] - PullRequest
0 голосов
/ 15 февраля 2020

Я хочу после кнопки onClick generate1() показать все элементы из моего Arraylist(.txt), содержащего значение Edittext.

Я новичок в программировании android java.

Это мой onClick метод generate1 ():

    public void generate1(View view) throws IOException {

        ArrayAdapter<String> adapter;
        ArrayList<String> ls = new ArrayList<>();
        EditText editText = (EditText) findViewById(R.id.editText);

        BufferedReader br = null;

        br = new BufferedReader(new InputStreamReader(getAssets().open("themen.txt")));
        String word;
        while ((word = br.readLine()) != null) {
            ls.add(word);
        }
        br.close();
        ListView listView = (ListView) findViewById(R.id.listView);
        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,ls);
        listView.setAdapter(adapter);

        for (String e : ls){
           if (e.toLowerCase().contains(editText.getText().toString())){
              //???? some toDO ???? (if i do here System.out.println(e); its work, but i want the Items to a listview!! 
           }
        }
    }

Ответы [ 3 ]

0 голосов
/ 15 февраля 2020

Сначала создайте класс адаптера следующим образом:

public class DemoAdapter extends BaseAdapter {
    private ArrayList<String> data;
    private Context context;
    private LayoutInflater inflater;

    public DemoAdapter(ArrayList<String> data, Context context) {
        this.data = data;
        this.context = context;
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int i) {
        return data.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        MyViewHolder myViewHolder;

        if (view==null){
            view = inflater.inflate(android.R.layout.simple_list_item_1,viewGroup,false);
            myViewHolder = new MyViewHolder(view);
            view.setTag(myViewHolder);
        } else {
            myViewHolder = (MyViewHolder) view.getTag();
        }

        myViewHolder.myTv.setText(data.get(i));

        return view;
    }


    class MyViewHolder{
        TextView myTv;

        public MyViewHolder(View item){
            myTv = item.findViewById(android.R.id.text1);
        }
    }
}

Затем в вашем методе generate1 инициализируйте его следующим образом:

DemoAdapter adapter = DemoAdapter(this,ls);
listView.setAdapter(adapter);
0 голосов
/ 15 февраля 2020

publi c void generate1 (представление View) выдает IOException {

    ArrayAdapter<String> adapter2;
    ArrayList<String> ls = new ArrayList<>();
    ArrayList<String> ls2 = new ArrayList<>();

    EditText editText = (EditText) findViewById(R.id.editText);

    BufferedReader br = null;

        br = new BufferedReader(new InputStreamReader(getAssets().open("themen.txt")));
        String word;
        while ((word = br.readLine()) != null) {
            ls.add(word);
        }
        br.close();
         ListView listView = (ListView) findViewById(R.id.listView);

    for (String e : ls) {

           int i = 0;
            while (i<ls.size()){

               if (e.toLowerCase().contains(editText.getText().toString())) {

                    ls2.add(i,e);
                }
                i++;
            }
        }

        adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, ls2);
        listView.setAdapter(adapter2);
    }

}

я нашел другой способ, и он сработал: D, но результат в просмотре списка каждый раз просматривается 10 раз !! ?? Я что то забыл ??

0 голосов
/ 15 февраля 2020

Вы должны создать два глобальных ArrayList. Сначала вы назвали 'ls' для всех результатов. Во-вторых, я вызываю 'lsFiltered' для отфильтрованных результатов; затем ...

изменить это

for (String e : ls){
       if (e.toLowerCase().contains(editText.getText().toString())){
          //???? some toDO ???? (if i do here System.out.println(e); its work, but i want the Items to a listview!! 
       }
    }

на это

for (int i = 0; i <ls.size() ; i++) {
        if (e.toLowerCase().contains(editText.getText().toString())){
            lsFiltered.add(ls.get(i));
        }
}
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,lsFiltered);
listView.setAdapter(adapter);
...