将包含文本视图值 [Android Java] 的文件 .txt (ArrayList) 中的所有项目设置为列表视图
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 。首先你为所有 results.second 命名为 '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);
首先像这样创建一个适配器class:
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) throws 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 次!??
我忘记了什么??
我想在按钮 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 。首先你为所有 results.second 命名为 '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);
首先像这样创建一个适配器class:
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) throws 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 次!?? 我忘记了什么??