Как обновить значение любого объекта в предыдущем сложенном адаптере Activity в Android

Я работаю над музыкальным приложением, в котором пользователь получает mp3-файл из WebService Api. Когда я выбираю любую песню в классе адаптера, я получаю ее значение selectionPositions и отправляю ее в следующем действии (PlaySong) с помощью Intent. В следующем действии, которое на самом деле имеет макет музыкального проигрывателя, начинает воспроизводиться эта песня.

Вот мой класс адаптера.

 public class Albumnlistadapter  extends BaseAdapter {
    Context cxt;
    ArrayList<Albumnlistdata>ARR;
    private MediaPlayer mediaPlayer;
    public TextView songName, duration;
    private double timeElapsed = 0, finalTime = 0;
    private int forwardTime = 2000, backwardTime = 2000;
    private Handler durationHandler = new Handler();
    private SeekBar seekbar;
    public  String st,satic;
    
    public String url;
    private int selectedPosition;
    private static final String TAG_MESSAGES = "messages";
    
    public SharedPreferences sharedpreferences;
    
    String filenameee;
       
    public Albumnlistadapter(Context cxt,ArrayList<Albumnlistdata>ARR) {
        
        this.cxt=cxt;
        this.ARR=ARR;
        
    }
    
    @Override
    public int getCount() {
        
        return ARR.size();
    }

    @Override
    public Object getItem(int position) {
        
        return position;
    }

    @Override
    public long getItemId(int position) {
        
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        
        View v=convertView;
        if(v==null)
        {
            v=View.inflate(cxt, R.layout.songslistitem, null);
        }
        TextView tvaudioName=(TextView)v.findViewById(R.id.TEXT1);
        LinearLayout laySong = (LinearLayout)v.findViewById(R.id.lvsong);
        tvaudioName.setText(ARR.get(position).strgeneralid);
    
    
        sharedpreferences = cxt.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
        satic ="http://sabakuch.org/public/uploads/tracks/";
         
        laySong.setOnClickListener(new OnClickListener() {
            
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            filenameee = ARR.get(position).strsongfileid;
            
            
            
            Toast.makeText(cxt, filenameee, Toast.LENGTH_SHORT).show();
            
            String PlaySongPath =satic+filenameee;
        
             Intent i =new Intent(cxt,Playsong.class);
             i.putExtra("path", PlaySongPath);
             i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             cxt.startActivity(i);
    
        }
        
    }); 
     
        return v;
    }
}

вот мое следующее занятие, в котором я играю песню.

   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   
    //set the layout of the Activity
    setContentView(R.layout.songsplay);
    PATH =getIntent().getExtras().getString("path");
    NAME =getIntent().getExtras().getString("name");
    
    mediaPlayer = MediaPlayer.create(Playsong.this, Uri.parse(PATH));
    finalTime = mediaPlayer.getDuration();
    //initialize views
    initializeViews();
}

public void initializeViews(){
    
      b1 = (ImageView) findViewById(R.id.backButton);
 
      b3=(ImageView)findViewById(R.id.playButton);
      b4=(ImageView)findViewById(R.id.nextButton);
   
      if(Index==0){
          
         b3.setVisibility(View.VISIBLE);
         //b2.setVisibility(View.GONE);
         
        }else if(Index==1){
            
            b3.setVisibility(View.GONE);
            //b2.setVisibility(View.VISIBLE);
            
        }
    
    //mediaPlayer = MediaPlayer.create(this, Uri.parse(PATH));
    
//  finalTime = mediaPlayer.getDuration();
      
      b3.setOnClickListener(new View.OnClickListener() {
         @SuppressLint("NewApi") @Override
         public void onClick(View v) {
             
                Index=1;
                changeimageButton();
              
                mediaPlayer.start();
                finalTime = mediaPlayer.getDuration();
           
             
         }
          });
     
      
      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            int temp = (int)startTime;
            
            if((temp+forwardTime)<=finalTime){
               startTime = startTime + forwardTime;
               mediaPlayer.seekTo((int) startTime);
              
               Toast.makeText(getApplicationContext(),"You have Jumped forward 5 seconds",Toast.LENGTH_SHORT).show();
            }
            else{
               Toast.makeText(getApplicationContext(),"Cannot jump forward 5 seconds",Toast.LENGTH_SHORT).show();
            }
         }
      });
      
      b4.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            int temp = (int)startTime;
            
            if((temp-backwardTime)>0){
               startTime = startTime - backwardTime;
               mediaPlayer.seekTo((int) startTime);
               Toast.makeText(getApplicationContext(),"You have Jumped backward 5 seconds",Toast.LENGTH_SHORT).show();
            }
            else{
               Toast.makeText(getApplicationContext(),"Cannot jump backward 5 seconds",Toast.LENGTH_SHORT).show();
            }
         }
      });
   }
   
   protected void changeimageButton() {
       
       if(Index==0){
         b3.setVisibility(View.VISIBLE);
         
        }else if(Index==1){
            
            b3.setVisibility(View.GONE);
        }
}

private Runnable UpdateSongTime = new Runnable() {
      public void run() {
         startTime = mediaPlayer.getCurrentPosition();
      
         myHandler.postDelayed(this, 100);
      }
   };
    
   
   @Override
    public void onBackPressed ()
    {
      if (mediaPlayer != null)
          mediaPlayer.stop();
      super.onBackPressed();
    }
   
   @Override
   public void onPause ()
   {
     if (mediaPlayer != null)
     {
         mediaPlayer.pause();
         mediaPlayer.stop();
     }
     super.onPause();
   }

}

У меня нет проблем до сих пор, но когда я хочу изменить песню. Я предполагаю, что если бы я мог изменить selectedPosition в предыдущем классе адаптера, я смог бы получить следующую и предыдущую песню из API. Как мне это сделать?? пожалуйста, помогите мне. Заранее спасибо.


person Devraj    schedule 27.01.2016    source источник
comment
Мне просто нужно знать, почему вы проголосовали за этот вопрос. просто хочу знать, не возражаю. Но это скромная просьба к вам, пожалуйста, помогите мне разобраться.. :)   -  person Devraj    schedule 27.01.2016
comment
этот подход поможет вам. :)   -  person Aks4125    schedule 27.01.2016
comment
сделайте общедоступный статический массив и используйте его на следующем экране с его позицией, и там вы можете изменить или обновить его значение.   -  person Sagar Maiyad    schedule 27.01.2016
comment
@ Akashbhatt-Aks4125- спасибо, Акаш, позвольте мне проверить вашу ссылку. Я вернусь к вам тогда.. :)   -  person Devraj    schedule 27.01.2016
comment
@Devraj Это просто концепция. для более подробного поиска BroadcastReceiver в Android. Самый простой способ отправки/получения данных из xyz-to-xyz. :)   -  person Aks4125    schedule 27.01.2016
comment
@ Akashbhatt-Aks4125- да, я понимаю, сэр. Мне нужно спросить одну вещь, можем ли мы использовать StartActivityForResult() здесь???   -  person Devraj    schedule 27.01.2016


Ответы (2)


Я решил эту проблему, логика заключается в том, что я щелкнул элемент в списке песен в Activity1 и получил selectedposition. Я анализирую это выбранное значение Songlist в Activity2. После этого я получил то же самое Songlist и в Activity2. Используя for-Loop, я только что сравнил Songlist с этим selectedposition. Таким образом, я получил текущее значение выбранного элемента, установил этот индекс в musicPlayer. когда я выбираю следующую и предыдущую песню, я увеличиваю и уменьшаю текущую index и получаю элемент текущей index.

person Devraj    schedule 08.02.2016

передать весь ArrayListARR в намерении с выбранной позицией. Делай все, что хочешь сейчас. Вы можете использовать отражение, чтобы передать arraylist в форме String или сделать ваши данные Albumnlist разделяемыми.

person Suhaib Roomy    schedule 27.01.2016
comment
Это может быть комментарий. - person Sagar Maiyad; 27.01.2016
comment
спасибо за быстрый ответ брат. Я тоже думал об этом, но застрял, когда мне пришлось сравнивать выбранную позицию предыдущего списка и нового проанализированного списка. не могли бы вы помочь мне в этом?? Так что можем попробовать. - person Devraj; 27.01.2016
comment
не понял, что вы имеете в виду. передать список, а также текущую позицию. пожалуйста, уточните свою проблему, почему вы должны сравнивать выбранную позицию предыдущего списка с новым проанализированным списком - person Suhaib Roomy; 27.01.2016