[英]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.