Как получить доступ / изменить представления в элементе списка из другого элемента в том же списке? - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть небольшое приложение, которое использует 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);

    }
}
...