[英]Set all items to a listview from a file .txt (ArrayList) what contains textview value [Android Java]
我想要一個按鈕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!!
}
}
}
您應該創建兩個全局 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);
首先創建一個像這樣的適配器類:
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);
public void generate1(View 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 次!!?? 我忘記了什么??
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.