GridView启动错误的应用程序是有办法解决这个问题吗?



好的,所以我使这个应用程序启动的游戏,但我似乎不能得到我的GridView(命名为网格)的搜索功能正常工作。每次我搜索一款游戏,然后点击我想要启动的游戏,而不是启动正确的游戏,它都会启动不同的游戏。在我添加搜索功能之前,当我点击游戏时,它会启动正确的游戏,因为位置编号总是相同的,但现在有了搜索功能,游戏的网格位置现在与我的数组列表(名为games)的顺序不同,导致错误的游戏启动。它启动正确的游戏的唯一时间是当我根本不使用搜索或留下空白字段。

MainActivity

中的代码
//Launch Game
grid.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
try
{
String appToLaunch = Games.get(position).getAppPackage();

Intent launchGame = new Intent();
launchGame = getPackageManager().getLaunchIntentForPackage(appToLaunch);

startActivity(launchGame);
Toast.makeText(getApplicationContext(),"Launched "+ Games.get(position).getTitle() ,Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(),"Error Failed to Launch " + Games.get(position).getTitle() + ". Make sure that app package is correct",Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
});

我的网格视图的ImageAdapter类

public class ImageAdapter extends BaseAdapter implements Filterable
{
private Context context;
ArrayList<Game> Games;
ArrayList<Game> GamesFiltered;
public ImageAdapter(Context context, ArrayList<Game> Games)
{
this.context = context;
this.Games = Games;
this.GamesFiltered = new ArrayList<>(Games);
}
public View getView(final int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) 
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// get layout from custom_gridview.xml
View gridView = inflater.inflate(R.layout.custom_gridview, null);
// set value into imageview
ImageView image = gridView.findViewById(R.id.item_image);
Bitmap bm = GamesFiltered.get(position).getImage();
if(bm != null)
image.setImageBitmap(bm);
else
image.setImageResource(R.drawable.blank);
// set value into textview
TextView text = gridView.findViewById(R.id.item_text);
text.setText(GamesFiltered.get(position).getTitle());
return gridView;
}
@Override
public int getCount()
{
return GamesFiltered.size();
}
@Override
public Object getItem(int position)
{
return null;
}
@Override
public long getItemId(int position)
{
return position;
}

@Override
public Filter getFilter()
{
Filter filter = new Filter()
{
@Override
protected FilterResults performFiltering(CharSequence charSequence)
{
FilterResults filterResults = new FilterResults();
if(charSequence == null || charSequence.length() ==0)
{
filterResults.count = Games.size();
filterResults.values = Games;
}
else
{
String searchStr = charSequence.toString();
ArrayList<Game> resultData = new ArrayList<>();
for(Game game: Games)
{
if(game.getTitle().contains(searchStr))
{
resultData.add(game);
}
filterResults.count = resultData.size();
filterResults.values = resultData;
}
}
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults)
{
GamesFiltered = (ArrayList<Game>) filterResults.values;
notifyDataSetChanged();
}
};
return filter;
}
}

编辑这里是我的游戏类

public class Game
{
private @NonNull String appPackage;
private @NonNull String title;
private Bitmap image;
public Game(@NonNull String appPackage,@NonNull String title,Bitmap image)
{
this.appPackage = appPackage;
this.title = title;
this.image = image;
}
public void setAppPackage(@NonNull String appPackage){this.appPackage = appPackage;}
public String getAppPackage(){return this.appPackage;}
public void setTitle(@NonNull String title){this.title = title;}
public String getTitle() {return this.title;}
public Bitmap getImage () { return this.image; }
public void setImage(Bitmap image) { this.image = image;}
}

您可能需要使用列表过滤项目来获取您的onItemClick方法中的元素:

String appToLaunch = GamesFiltered.get(position).getAppPackage();

不是

String appToLaunch = Games.get(position).getAppPackage();

最新更新