简体   繁体   English

Listview搜索结果onclick错误返回

[英]Listview search result onclick wrong return

When I click list item from search result, return to 0 position. 当我从搜索结果中单击列表项时,返回到0位置。 How do I get original position from string? 如何从字符串获取原始位置?

My code is: 我的代码是:

String.xml 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>

My code is: 我的代码是:

MenuSearch.xml 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>

My code is: MainActivity.java 我的代码是: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);
   }
}

Please help me 请帮我

Couple of day's ago I was doing the some project and digging on internet but I found the solution yesterday. 几天前,我正在做一些项目并在Internet上进行挖掘,但是昨天我找到了解决方案。 In my way it may not be professional but it works very fine and help you.The concept is I will identify my products by their corresponding code and whenever any one searches it, the it will get its code and it will open the activity. 以我的方式,它可能不是专业的,但是它可以很好地工作并为您提供帮助。概念是我将通过产品的相应代码来识别我的产品,每当有人搜索该产品时,它就会获得其代码并打开活动。

My adaptor class. 我的适配器类。

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();

    }
} 

My MainActivity class note I have included my string array in main activity and I have added another array which named as Code it will help me to identify after search. 我的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;
    }
}

Finally My getter and setter class is as Item class it helps me to get and set Code and my product list. 最后,我的getter和setter类作为Item类,它可以帮助我获取和设置Code以及我的产品列表。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM