У меня есть небольшое приложение, которое использует ListView
, у каждого элемента есть кнопка воспроизведения, кнопка открытия / закрытия и ImageView
, чья видимость установлена на View.GONE
. Когда я нажимаю кнопку открытия / закрытия, он должен установить ImageView
в этом одном элементе списка на View.VISIBLE
, изменить кнопку открытия / закрытия и закрыть все другие элементы списка, которые отображают ImageView
как ВИДИМЫЕ, и изменить их кнопка открытия / закрытия, чтобы отразить закрыто. Это мой onClick
в моем пользовательском ArrayAdapter
.
boolean open = false;
imgOpen_Close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!open){
openClose.setImageResource(R.drawable.open_arrow);
mainImage.setVisibility(View.VISIBLE);
open = true;
}else{
openClose.setImageResource(R.drawable.close_arrow);
mainImage.setVisibility(View.VISIBLE);
open = false;
}
});
Как получить доступ к View
в одном элементе списка из другого элемента списка?
Весь пользовательский ArrayAdapter.
package net.androidbootcamp.mypersonalplaylist;
import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MyListAdapter extends ArrayAdapter<String> {
private final Activity context;
private final String[] songs;
private final Integer[] imgID;
MediaPlayer mpKickStart, mpGirlsGirls, mpHomeSweetHome;
public MyListAdapter(Activity context, String[] songs, Integer[] imgID){
super(context, R.layout.list_view_custom, songs);
this.context=context;
this.songs=songs;
this.imgID=imgID;
}
public View getView(final int position, View view, ViewGroup parent){
LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(R.layout.list_view_custom, null, true);
TextView txtSongName = rowView.findViewById(R.id.txtSongName);
final ImageView imgCoverArt = rowView.findViewById(R.id.imgCoverArt);
final ImageView imgPlayButton = rowView.findViewById(R.id.imgPlayButton);
final ImageView imgOpen_Close = rowView.findViewById(R.id.imgOpen_Close);
txtSongName.setText(songs[position]);
imgCoverArt.setImageResource(imgID[position]);
mpKickStart = new MediaPlayer();
mpKickStart = MediaPlayer.create(context, R.raw.kickstartmyheart);
mpGirlsGirls = new MediaPlayer();
mpGirlsGirls = MediaPlayer.create(context, R.raw.girlsgirlsgirls);
mpHomeSweetHome = new MediaPlayer();
mpHomeSweetHome = MediaPlayer.create(context, R.raw.homesweethome);
imgPlayButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (position){
case 0:
break;
case 1:
break;
case 2:
break;
default:
break;
}
}
});
imgOpen_Close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("POSITION", "Position Clicked: " + position);
}
});
return rowView;
}
}
MainActivity
package net.androidbootcamp.mypersonalplaylist;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
ListView list;
String[] songs = {"Name 1", "Name 2", "Name 3"};
Integer[] imgID = {R.drawable.kickstart_my_heart, R.drawable.girls_girls_girls, R.drawable.home_sweet_home};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyListAdapter adapter = new MyListAdapter(this, songs, imgID);
list = findViewById(R.id.listView);
list.setAdapter(adapter);
}
}