Я занимаюсь разработкой приложения для воспроизведения музыки, но за последние два дня я застал исправление ошибки. Here is a screenshot of the app. В принципе пользователь может добавить новое представление, назовите его, однако он пожелает и выберет mp3-файл для ссылки на этот вид.Сброс значка последнего щелкнутого вида при нажатии на вид в GridLayout
Как вы можете видеть Каждый вид имеет текст, который немного воспроизводит значок. Этот значок переключается на значок паузы во время воспроизведения звука. Here you can see the pause icon.
Выпуск 1: Когда пользователь запускает звук, а затем нажмите на другой квадрат, предыдущий звук останавливается, как он должен и новый звук начинается, но значок старой площади в остается значок паузы и т.д. на экране во многих квадратах будет значок паузы, а на самом деле не воспроизводится звук.
Выпуск 2: Допустим, что пользователь нажмет абсолютный первый квадрат, который в ArrayList соответствует положение 0. Тогда пользователь прокручивает вниз к точке, что квадрат он нажал уже не видно. Когда пользователь снова прокручивается, квадрат, на который он щелкнул, будет иметь набор иконок для воспроизведения при воспроизведении звука. Я подумал, что это связано с тем, что в моем GridAdapter я устанавливаю каждый новый recicled view, чтобы иметь значок воспроизведения, и я не могу понять, как установить оператор if. Как адаптер должен знать, что коробка играет звук?
Большое спасибо и любите.
GridItemAdapter.java:
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;
}
}
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; } }
Не связывайте свой код с внешним сайтом. Нам не нужны все строки только неприятные. Добавьте минимальный проверяемый пример. – basic
Хорошо, я добавлю код в сообщение – user11230