Просмотр списка результатов поиска при нажатии неправильный возврат

Когда я нажимаю элемент списка из результатов поиска, возвращаюсь в позицию 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);
   }
}

Помогите, пожалуйста

Java для Javascript - это то же самое, что Pain для Painting или Ham для Hampster. Они совершенно разные. Настоятельно рекомендуется, чтобы начинающие программисты попытались выучить название языка, на котором они пытаются писать код. Когда вы публикуете вопрос, пожалуйста, пометьте его соответствующим образом.

CertainPerformance 10.09.2018 06:36

Когда вы фильтруете в списке, тогда позиция массива результатов будет изменена ... Так что можете проверить название страны, а не позицию ... попробуйте это.

Saurabh Vadhva 10.09.2018 06:41

Вы можете прояснить вопрос? Поскольку индекс клика совпадает с индексом исходного массива.

hqt 10.09.2018 06:49

Вы когда-нибудь пробовали getItem в ListView?

EngineSense 10.09.2018 06:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
121
1

Ответы 1

Пару дней назад я делал какой-то проект и копался в Интернете, но вчера я нашел решение. На мой взгляд, это может быть непрофессионально, но оно работает очень хорошо и помогает вам. Концепция заключается в том, что я буду идентифицировать свои продукты по их соответствующему коду, и всякий раз, когда кто-либо будет искать его, он получит свой код и откроет действие.

Мой класс адаптера.

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;
    }
}

Другие вопросы по теме