2016-07-31 32 views
0

我是新來的機器人,甚至編程它只有3周 我想通過顯示圖片和播放爲我的德語課建立一個應用程序音頻。 現在我的問題,我有一個列表視圖,其中顯示一個小的圖片和一個字,然後我做了一個onItemClickListener這個列表視圖,它顯示項目形式和arraylist類型(一個類的構造和獲取方法對於圖像資源和音頻資源和單詞它自己的字符串)如何迭代通過自定義ArrayList移動​​到下一個項目,當點擊一個按鈕

無論如何,我管理項目點擊項目列表時,它打開彈出式佈局,顯示圖像和播放按鈕。

然後,我想添加next和prev按鈕去下一個圖像和音頻,而不是關閉彈出窗口,再次點擊想要的項目但沒有運氣。

我會嘗試發佈相關的最重要的代碼

public class Lesson1Words extends AppCompatActivity { 


private MediaPlayer mMediaPlayer; 


private MediaPlayer.OnCompletionListener mCompletionListener = new MediaPlayer.OnCompletionListener() { 
    @Override 
    public void onCompletion(MediaPlayer mediaPlayer) { 
     // Now that the sound file has finished playing, release the media player resources. 
     releaseMediaPlayer(); 

    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.word_list); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    final ArrayList<Word> lessone1Words = new ArrayList<>(); 

    lessone1Words.add(new Word("vernünftig", R.drawable.vernunftig, R.raw.l01_vernunftig)); 
    lessone1Words.add(new Word("großzügig", R.drawable.groszugig, R.raw.l01_grosszugig)); 
    lessone1Words.add(new Word("fair", R.drawable.fair, R.raw.l01_fair)); 
    lessone1Words.add(new Word("intelligent/klug", R.drawable.intelligent, R.raw.l01_intelligent)); 
    lessone1Words.add(new Word("frech", R.drawable.frech, R.raw.l01_frech)); 
    lessone1Words.add(new Word("kreativ", R.drawable.kreaiv, R.raw.l01_kreativ)); 
    lessone1Words.add(new Word("sparsam", R.drawable.sparsam, R.raw.l01_sparsam)); 
    lessone1Words.add(new Word("realistisch", R.drawable.realistisch, R.raw.l01_realistisch)); 
    lessone1Words.add(new Word("hübsch", R.drawable.hubsch, R.raw.l01_hubsch)); 
    lessone1Words.add(new Word("aufmerksam", R.drawable.aufmerksam, R.raw.l01_aufmerksam)); 

    final WordAdapter adapter = new WordAdapter(this, lessone1Words, R.color.lesson_color); 
    final ListView listView = (ListView) findViewById(R.id.word_list); 


    assert listView != null; 
    listView.setAdapter(adapter); 


    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, final View view, final int position, long l) { 

      final Word word = lessone1Words.get(position); 

      //open Popup layout for the image but still can't iterate through the arraylist 
      LayoutInflater layoutInflater 
        = (LayoutInflater) getBaseContext() 
        .getSystemService(LAYOUT_INFLATER_SERVICE); 

      View popupView = layoutInflater.inflate(R.layout.popup, null); 


      final PopupWindow popupWindow = new PopupWindow(
        popupView, 
        AppBarLayout.LayoutParams.WRAP_CONTENT, 
        AppBarLayout.LayoutParams.WRAP_CONTENT); 
      // when touch outside the Popup layout it dismiss it 
      popupWindow.setFocusable(true); 
      popupWindow.setBackgroundDrawable(new BitmapDrawable()); 
      popupWindow.setOutsideTouchable(true); 

      //change image in ImageView of Popup.xml to current image in the array 

      final ImageView imageBig = (ImageView) popupView.findViewById(R.id.popimage); 

      imageBig.setImageResource(word.getImageResourceId()); 

       ImageView playSound = (ImageView) popupView.findViewById(R.id.play_image); 
      playSound.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        //responsible for the playback of the audio according to the arraylist index 
        releaseMediaPlayer(); 
        mMediaPlayer = MediaPlayer.create(Lesson1Words.this, word.getAudioResourceId()); 
        mMediaPlayer.setVolume(0.5f, 0.5f); 
        mMediaPlayer.start(); 
        mMediaPlayer.setOnCompletionListener(mCompletionListener); 

       } 
      }); 
      popupWindow.showAtLocation(listView, Gravity.CENTER, 0, 0); 


      ImageView nextImage = (ImageView) popupView.findViewById(R.id.next_image); 

      nextImage.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

      // cant go for the nextimage or audio 


       } 
      }); 
     } 
    });. 
    } 
    } 
+0

你可以關閉當前的彈出窗口,並使用來自該窗口的位置參數爲下一個/上一個項目創建一個新的彈出窗口onItemClickListener。 –

+0

請發表您試用過的內容,因爲它聽起來像是獲得(位置+ 1)和設置新圖像的簡單電話應該可以工作。 – lionscribe

+0

@lionscribe我試過這個詞word1 = lessone1Words.get(position + 1); imageBig.setImageResource(word1.getImageResourceId()); //但它只用於下一個圖像,但它不會繼續 –

回答

0

當創建彈出窗口,設定位置值

imageBig.setTag(Integer.valueOf(position)); 

標籤在onclick函數調用

int pos = imageBig.getTag()+1; 
imageBig.setTag(Integer.valueOf(pos)); 
WordNext = getPosition(position); 
... 
+0

setTag爲int位置不幸導致錯誤java.lang.NullPointerException –

+0

現在我把彈出窗口顯示後立即setTag,但位置不能用在onClick導致其最終變量 –

+0

我改變了代碼隱式使用Integer.valueOf() 。 – lionscribe

相關問題