Когда я нажимаю элемент списка из результатов поиска, возвращаюсь в позицию 0. Как мне получить исходную позицию из строки?
Мой код:
String.xml
<resources>
<string name = "app_name">SearchViewList</string>
<string-array name = "array_country">
<item>Alemania</item>
<item>Mexico</item>
<item>EUA</item>
<item>Argentina</item>
<item>Rusia</item>
<item>España</item>
</string-array>
</resources>
Мой код:
MenuSearch.xml
<?xml version = "1.0" encoding = "utf-8"?>
<menu xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto">
<item android:id = "@+id/menuSearch"
android:title = "Buscar"
android:icon = "@android:drawable/ic_menu_search"
app:actionViewClass = "android.widget.SearchView"
app:showAsAction = "always"></item>
</menu>
Мой код: MainActivity.java
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView)findViewById(R.id.lista);
ArrayList<String> arrayCountry = new ArrayList<>(); arrayCountry.addAll(Arrays.asList(getResources().getStringArray(R.array.array_country)));
adapter = new ArrayAdapter<>(
MainActivityRespaldo2.this, android.R.layout.simple_list_item_1, arrayCountry);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView adapterView, View view, int posicion, long l) {
switch (posicion) {
case 0 :
Intent i0 = new Intent(getApplicationContext(), Alemania.class);
startActivity(i0);
break;
case 1 :
Intent i1 = new Intent(getApplicationContext(), Mexico.class);
startActivity(i1);
break;
case 2 :
Intent i2 = new Intent(getApplicationContext(), EUA.class);
startActivity(i2);
break;
case 3 :
Intent i3 = new Intent(getApplicationContext(), Argentina.class);
startActivity(i3);
break;
default:
Toast.makeText(getApplicationContext(), "Developing", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_buscar, menu);
MenuItem item = menu.findItem(R.id.menuBuscar);
SearchView searchView = (SearchView) item.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
}
Помогите, пожалуйста
Когда вы фильтруете в списке, тогда позиция массива результатов будет изменена ... Так что можете проверить название страны, а не позицию ... попробуйте это.
Вы можете прояснить вопрос? Поскольку индекс клика совпадает с индексом исходного массива.
Вы когда-нибудь пробовали getItem в ListView?
Пару дней назад я делал какой-то проект и копался в Интернете, но вчера я нашел решение. На мой взгляд, это может быть непрофессионально, но оно работает очень хорошо и помогает вам. Концепция заключается в том, что я буду идентифицировать свои продукты по их соответствующему коду, и всякий раз, когда кто-либо будет искать его, он получит свой код и откроет действие.
Мой класс адаптера.
public class MainActivityAdapter extends RecyclerView.Adapter<MainActivityAdapter.Holderview>{
private List<Item> productlist;
private Context context;
public MainActivityAdapter(List<Item> productlist, Context context) {
this.productlist = productlist;
this.context = context;
}
@Override public Holderview onCreateViewHolder(ViewGroup parent, int viewType) {
View layout= LayoutInflater.from(parent.getContext()).
inflate(R.layout.customitem,parent,false);
return new Holderview(layout);
}
@Override public void onBindViewHolder(Holderview holder, final int position) {
holder.v_name.setText(productlist.get(position).getName());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View view) {
if (productlist.get(position).getCode()= = "A")
{
context.startActivity(new Intent(context, one.class));
Toast.makeText(context, "Position is"+productlist.get(position).getName(), Toast.LENGTH_SHORT).show();
}
else if (productlist.get(position).getCode()= = "B")
{
context.startActivity(new Intent(context, two.class));
Toast.makeText(context, "Position is"+productlist.get(position).getName(), Toast.LENGTH_SHORT).show();
}
else if (productlist.get(position).getCode()= = "C")
{
context.startActivity(new Intent(context, three.class));
Toast.makeText(context, "Position is"+productlist.get(position).getName(), Toast.LENGTH_SHORT).show();
}
else if (productlist.get(position).getCode()= = "D")
{
context.startActivity(new Intent(context, four.class));
Toast.makeText(context, "Position is"+productlist.get(position).getName(), Toast.LENGTH_SHORT).show();
}
else if (productlist.get(position).getCode()= = "E")
{
context.startActivity(new Intent(context, five.class));
Toast.makeText(context, "Position is"+productlist.get(position).getName(), Toast.LENGTH_SHORT).show();
}
}
});
}
@Override public int getItemCount() {
return productlist.size();
}
public void setfilter(List<Item> listitem)
{
productlist=new ArrayList<>();
productlist.addAll(listitem);
notifyDataSetChanged();
}
class Holderview extends RecyclerView.ViewHolder
{
TextView v_name;
Holderview(View itemview)
{
super(itemview);
v_name = (TextView) itemView.findViewById(R.id.product_title);
}
}
public void SetFilter(ArrayList<Item> newList)
{
productlist= new ArrayList<>();
productlist.addAll(newList);
notifyDataSetChanged();
}
}
Мое примечание к классу MainActivity. Я включил свой строковый массив в основное действие, и я добавил еще один массив, названный как Code, который поможет мне идентифицировать после поиска.
public class MainActivity extends AppCompatActivity implements SearchView.OnQueryTextListener {
RecyclerView showrcy;
List<Item> productlists = new ArrayList<>();
MainActivityAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
productlists.add(new Item("MyproductOne", "A"));
productlists.add(new Item("MyproductTwo", "B"));
productlists.add(new Item("MyproductThree", "C"));
productlists.add(new Item("MyproductFour", "D"));
showrcy = (RecyclerView) findViewById(R.id.listshow);
showrcy.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
showrcy.setLayoutManager(linearLayoutManager);
adapter = new MainActivityAdapter(productlists, MainActivity.this);
showrcy.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.searchfile, menu);
MenuItem myActionMenuItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) myActionMenuItem.getActionView();
searchView.setOnQueryTextListener(this);
return true;
}
private List<Item> filter(List<Item> pl, String query) {
query = query.toLowerCase();
final List<Item> filteredModeList = new ArrayList<>();
for (Item model : pl) {
final String text = model.getName().toLowerCase();
if (text.startsWith(query)) {
filteredModeList.add(model);
}
}
return filteredModeList;
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
newText= newText.toLowerCase();
ArrayList<Item> newList= new ArrayList<>();
for (Item mylists: productlists)
{
String name= mylists.getName().toLowerCase();
if (name.contains(newText))
newList.add(mylists);
}
adapter.SetFilter(newList);
return true;
}
}
Наконец, мой класс получения и установки - это класс Item, он помогает мне получать и устанавливать код и мой список продуктов.
public class Item {
private String name,code;
public Item(String name,String code) {
this.name = name;
this.code = code;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Java для Javascript - это то же самое, что Pain для Painting или Ham для Hampster. Они совершенно разные. Настоятельно рекомендуется, чтобы начинающие программисты попытались выучить название языка, на котором они пытаются писать код. Когда вы публикуете вопрос, пожалуйста, пометьте его соответствующим образом.