Присвоение строчкам массива id
Делаю приложение под android, которое смотря на id элемента ListView выводит определенный текстовый файл во второй активности. Проблема заключается в том, что когда я добавил поиск на главную активность при поиске не нужные элементы отсеиваются и на главном экране высвечивается нужный элемент, но при переходе на него открывается самый первый файл который бы соответствовал первому элементу ListView. Хотелось бы узнать можно ли как-то присвоить свои id элементам ListView, чтобы при "перемешивании" элементов текста не менялись
MainActivity
package com.example.arseny.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
String[] items;
ArrayList<String> listItems;
ArrayAdapter<String> adapter;
ListView listView;
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(ListView)findViewById(R.id.listView);
editText=(EditText)findViewById(R.id.txtsearch);
initList();
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.toString().equals("")){
initList();
} else {
searchItem(s.toString());
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
public void searchItem(String textToSearch){
for(String item:items){
String textToSearch1 = textToSearch.toLowerCase();
if(!item.toLowerCase().contains(textToSearch1)){
listItems.remove(item);
}
}
adapter.notifyDataSetChanged();
}
public void initList() {
items = new String[]{"1. ...",
"2. ...",
"3. ...",
"4. ...",
"5. ...",
"6. ...",
"7. ...",
"8. ...",
};
listItems = new ArrayList<>(Arrays.asList(items));
adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.txtitem, listItems);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, Activity_Two.class);
intent.putExtra("title", position);
startActivity(intent);
}
});
}
}
TwoActivity
package com.example.arseny.myapplication;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.io.Writer;
public class Activity_Two extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
TextView textView = (TextView)findViewById(R.id.textView);
textView.setMovementMethod(new ScrollingMovementMethod());
Intent intent = getIntent();
String resName = "n" + intent.getIntExtra("title", 0);
Log.i("name", resName);
Context context = getBaseContext();
String text = readRawTextFile(context, getResources().getIdentifier(resName, "raw", "com.example.arseny.myapplication"));
textView.setText(text);
}
@NonNull
private String readRawTextFile(Context context, int resId) {
InputStream inputStream = context.getResources().openRawResource(resId);
InputStreamReader inputReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputReader);
Writer writer = new StringWriter();
try {
String line;
while ((line = bufferedReader.readLine()) != null) {
writer.write(line);
writer.append("\n");
}
bufferedReader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
return writer.toString();
}
}
Помогите пожалуйста!
Ответы (1 шт):
Используй в качестве элементов списка не String, а класс с id
List items = new ArrayList<Item>(){{
add(new Item(0, "..."));
add(new Item(1, "..."));
add(new Item(2, "..."));
add(new Item(3, "..."));
add(new Item(4, "..."));
}};
class Item {
int id;
String text;
public Item (int id, String text) {
this.id = id;
this.text = text;
}
}
И почему ты заполняешь массив, а потом конвертируешь его в список? Работай сразу со списками, они удобнее и гибче.