Android 在GridLayout中单击视图时重置上次单击视图的图标
我正在开发一个音乐播放应用程序,但在过去的两天里我一直在修复一个bug。基本上,用户可以添加一个新视图,随意命名,并选择一个mp3文件链接到该视图 正如您所看到的,每个视图都有一个文本,上面有一个小的播放图标。播放音频时,此图标切换为暂停图标 第1期: 当用户启动一个声音,然后单击另一个方块时,前一个声音停止,新的声音开始,但旧方块的图标保持暂停图标,因此在屏幕上,最终许多方块会有暂停图标,而实际上不会播放声音 问题2:假设用户单击绝对第一个正方形,它在arrayList中对应于位置0。然后用户向下滚动,直到他单击的正方形不再可见。当用户再次向上滚动时,他单击的方块将设置播放图标,同时播放声音。我想这是因为在我的GridAdapter中,我将每个新接收的视图都设置为具有播放图标,但我不知道如何设置if语句。适配器如何知道盒子是否在播放声音 非常感谢和爱 GridItemAdapter.java:Android 在GridLayout中单击视图时重置上次单击视图的图标,android,listview,android-gridview,Android,Listview,Android Gridview,我正在开发一个音乐播放应用程序,但在过去的两天里我一直在修复一个bug。基本上,用户可以添加一个新视图,随意命名,并选择一个mp3文件链接到该视图 正如您所看到的,每个视图都有一个文本,上面有一个小的播放图标。播放音频时,此图标切换为暂停图标 第1期: 当用户启动一个声音,然后单击另一个方块时,前一个声音停止,新的声音开始,但旧方块的图标保持暂停图标,因此在屏幕上,最终许多方块会有暂停图标,而实际上不会播放声音 问题2:假设用户单击绝对第一个正方形,它在arrayList中对应于位置0。然后用户
public class GridItemAdapter extends ArrayAdapter<GridItem> {
private static final String LOG_TAG = GridItemAdapter.class.getSimpleName();
public GridItemAdapter(Activity context, ArrayList<GridItem> gridItems) {
// Here, we initialize the ArrayAdapter's internal storage for the context and the list.
// the second argument is used when the ArrayAdapter is populating a single TextView.
// Because this is a custom adapter for two TextViews and an ImageView, the adapter is not
// going to use this second argument, so it can be any value. Here, we used 0.
super(context, 0, gridItems);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Check if the existing view is being reused, otherwise inflate the view
View gridItemView = convertView;
if(gridItemView == null) {
gridItemView = LayoutInflater.from(getContext()).inflate(
R.layout.grid_item, parent, false);
}
// Get the {@link AndroidFlavor} object located at this position in the list
GridItem currentGridItem = getItem(position);
// Find the TextView in the list_item.xml layout with the ID version_name
TextView nameTextView = (TextView) gridItemView.findViewById(R.id.text_1);
// set this text on the name TextView
nameTextView.setText(currentGridItem.getSoundName());
ImageView playIcon = (ImageView) gridItemView.findViewById(R.id.image_1);
playIcon.setImageResource(R.drawable.play_ic);
// Return the whole list item layout (containing 2 TextViews and an ImageView)
// so that it can be shown in the ListView
return gridItemView;
}
}
公共类GridItemAdapter扩展了ArrayAdapter{
私有静态最终字符串LOG_TAG=GridItemAdapter.class.getSimpleName();
公共GridItemAdapter(活动上下文,ArrayList gridItems){
//这里,我们为上下文和列表初始化ArrayAdapter的内部存储。
//第二个参数在ArrayAdapter填充单个TextView时使用。
//因为这是两个TextView和一个ImageView的自定义适配器,所以适配器不是
//我们将使用第二个参数,所以它可以是任何值。
超级(上下文,0,gridItems);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//检查现有视图是否正在重新使用,否则会膨胀视图
View gridItemView=convertView;
如果(gridItemView==null){
gridItemView=LayoutInflater.from(getContext()).flate(
R.layout.grid_项,父项,false);
}
//获取位于列表中此位置的{@link AndroidFlavor}对象
GridItem currentGridItem=getItem(位置);
//在list_item.xml布局中查找ID版本名称为的TextView
TextView name TextView=(TextView)gridItemView.findViewById(R.id.text_1);
//在名称TextView上设置此文本
nameTextView.setText(currentGridItem.getSoundName());
ImageView播放图标=(ImageView)gridItemView.findViewById(R.id.image_1);
playIcon.setImageResource(R.drawable.play_ic);
//返回整个列表项布局(包含两个TextView和一个ImageView)
//以便可以在ListView中显示它
返回gridItemView;
}
}
- MainActivity.java感兴趣的代码片段:
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { /* if (lastPosition != -1) { Log.v(TAG3, "Inisde if block, lastposition = " + lastPosition); // Whatever position you're looking for int firstPosition = gridView.getFirstVisiblePosition(); int wantedChild = lastPosition - firstPosition; View wantedView = gridView.getChildAt(wantedChild); Log.v(TAG3, "lastRow initiated, lastrow = " + wantedView); ImageView lastIc = (ImageView) wantedView.findViewById(R.id.image_1); lastIc.setImageResource(R.drawable.play_ic); } */ togglePlayback(i, view); lastPosition = i; Log.v(TAG3, "outside if block, lastPosition = " + lastPosition); } }); public void togglePlayback(int i, View v){ final View view = v; if(!isPlaying) { releaseMediaPlayer(); ImageView playIc = (ImageView) view.findViewById(R.id.image_1); playIc.setImageResource(R.drawable.pause_ic); GridItem word = gridItems.get(i); try { mMediaPlayer = MediaPlayer.create(MainActivity.this, Uri.parse(word.getSoundPath())); }catch (IllegalArgumentException e){ e.printStackTrace(); } mMediaPlayer.start(); isPlaying = true; mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { releaseMediaPlayer(); ImageView playIc = (ImageView) view.findViewById(R.id.image_1); playIc.setImageResource(R.drawable.play_ic); isPlaying = false; } }); }else{ releaseMediaPlayer(); ImageView playIc = (ImageView) view.findViewById(R.id.image_1); playIc.setImageResource(R.drawable.play_ic); isPlaying = false; } }
gridView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){ @凌驾 公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){ /* 如果(最后位置!=-1){ Log.v(TAG3,“Inisde if block,lastposition=“+lastposition”); //不管你在找什么职位 int firstPosition=gridView.getFirstVisiblePosition(); int wantedChild=lastPosition-firstPosition; View wantedView=gridView.getChildAt(wantedChild); Log.v(TAG3,“lastRow已启动,lastRow=“+wantedView”); ImageView=(ImageView)wantedView.findViewById(R.id.image_1); lastIc.setImageResource(R.drawable.play_ic); } */ 切换播放(i,视图); lastPosition=i; Log.v(TAG3,“外部if块,lastPosition=“+lastPosition”); } }); 公共无效切换播放(int i,视图v){ 最终视图=v; 如果(!显示){ 释放MediaPlayer(); ImageView playIc=(ImageView)view.findViewById(R.id.image_1); playIc.setImageResource(R.drawable.pause_ic); GridItem word=gridItems.get(i); 试一试{ mMediaPlayer=MediaPlayer.create(MainActivity.this,Uri.parse(word.getSoundPath()); }捕获(IllegalArgumentException e){ e、 printStackTrace(); } mmediplayer.start(); isplay=true; mmediplayer.setOnCompletionListener(新的MediaPlayer.OnCompletionListener(){ @凌驾 完成时的公共作废(MediaPlayer MediaPlayer){ 释放MediaPlayer(); ImageView playIc=(ImageView)view.findViewById(R.id.image_1); playIc.setImageResource(R.drawable.play_ic); isplay=false; } }); }否则{ 释放MediaPlayer(); ImageView playIc=(ImageView)view.findViewById(R.id.image_1); playIc.setImageResource(R.drawable.play_ic); isplay=false; } }
isPlaying
if(itemList.get(index.isplay){
//将图标设置为暂停一次
}否则{
//将图标设置为播放一个
}
if(itemList.get(index.isplay){
//编写暂停当前歌曲的代码
}否则{
//暂停你的歌
//游戏项目
itemList.get(index).isplay=true;
项目