Ich entwickle eine App zum Abspielen von Musik, aber ich habe in den letzten zwei Tagen einen Fehler behoben. Here is a screenshot of the app. Grundsätzlich kann der Benutzer eine neue Ansicht hinzufügen, benennen, wie er will, und eine mp3-Datei auswählen, um auf diese Ansicht zu verlinken.Reset-Symbol der zuletzt angeklickten Ansicht beim Klicken auf eine Ansicht in GridLayout
Wie Sie sehen können Jede Ansicht hat einen Text, der ein kleines Spielsymbol. Dieses Symbol wechselt während der Audiowiedergabe zu einem Pausensymbol. Here you can see the pause icon.
Problem 1: Wenn der Benutzer einen Ton beginnt und dann auf ein anderes Feld klicken, stoppt der vorhergehenden Ton, wie es sollte und der neue Sound beginnt, aber die alten Platz das Symbol auf das Symbol Pause bleibt, und so weiter Auf dem Bildschirm haben viele Quadrate das Pausensymbol, während sie tatsächlich keinen Ton abspielen. Nehmen wir an, der Benutzer klickt auf das absolute erste Quadrat, das in der arrayList der Position 0 entspricht. Dann scrollt der Benutzer bis zu dem Punkt, an dem das Quadrat, auf das er geklickt hat, nicht mehr sichtbar ist. Wenn der Benutzer erneut nach oben scrollt, wird das Spielsymbol beim Abspielen des Klangs aktiviert. Ich dachte, das liegt daran, dass ich in meinem GridAdapter jede neu aufgenommene Ansicht so eingerichtet habe, dass sie das Wiedergabesymbol hat, und ich kann nicht herausfinden, wie ich eine if-Anweisung setzen soll. Wie sollte der Adapter wissen, ob die Box einen Ton abspielt?
Vielen Dank und Liebe.
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 Schnipsel von Interesse:
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; } }
Verknüpfen Sie Ihren Code nicht mit einer externen Website. Wir brauchen nicht alle Linien nur die lästigen. Fügen Sie ein minimales nachprüfbares Beispiel hinzu. – basic
Ok Ich füge den Code in den Beitrag ein – user11230