2013-03-14 55 views
0

我想随机显示5个xml布局,并且还可以在适当的按钮上点击每个出现的xml文件来随机播放它们。高兴地说,下面的代码工作真棒.---- ** 我已经把每个shuffle的xml文件延迟0.75秒。在这个延迟我有一个声音play.I没有真正的想法如何实现这一点。在下面的代码中我使用了Switch-Case,但它不工作。我的要求是,如果我点击xml文件1上的按钮,我想播放Sound1,如果Button是来自Xml文件5,我想要播放相应的Sound5等等......就这样,持续0.75秒,然后移动到下一个XML文件并重复循环。 * ----在按钮上显示图像(或媒体)单击随机更改布局

public class ReceivingActivity extends Activity{ 

    Random random = new Random(); 
    Handler handler = new Handler(); 
    private int mPosition = 0; 
    private Handler mHandler = new Handler(); 
    private List<Integer> mLayouts; 
    private Button mButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
       mLayouts = new ArrayList<Integer>(); 
       mLayouts.add(R.layout.first); 
       mLayouts.add(R.layout.second); 
       mLayouts.add(R.layout.third); 
       mLayouts.add(R.layout.fourth); 
       mLayouts.add(R.layout.fifth); 

       Collections.shuffle(mLayouts); 
       setContentView(mLayouts.get(mPosition)); 

       mButton = (Button)findViewById(R.id.btnid); 
       mButton.setOnClickListener(mListener); 
       mPosition++; 
    } 

    private OnClickListener mListener = new OnClickListener() { 

     @Override 
     public void onClick(View v) { 



      // TODO Auto-generated method stub 
      mHandler.postDelayed(new Runnable() { 

       @Override 
       public void run() { 
        Toast.makeText(getApplicationContext(), "WTH is happening", Toast.LENGTH_SHORT).show(); 
        // TODO Auto-generated method stub 
        if(mPosition >= mLayouts.size()){ 
         int lastId = mLayouts.get(mLayouts.size() - 1); 
         Collections.shuffle(mLayouts); 
         while (lastId == mLayouts.get(0)) { 
          Collections.shuffle(mLayouts); 
         } 
         mPosition = 0; 
        } 
        setContentView(mLayouts.get(mPosition)); 


       switch (mLayouts.get(mPosition)) { 
        case R.layout.first: 
         Toast.makeText(getApplicationContext(), "First", Toast.LENGTH_SHORT).show(); 

         iv1.setBackgroundResource(R.drawable.ic_launcher); 
         break; 

        case R.layout.second: 
         Toast.makeText(getApplicationContext(), "second", Toast.LENGTH_SHORT).show(); 
    //Some sound      
         iv2.setBackgroundResource(R.drawable.ic_launcher); 

         break; 

        case R.layout.third: 
         Toast.makeText(getApplicationContext(), "third", Toast.LENGTH_SHORT).show(); 
    //Some media , Different for each Layout.. 

         iv3.setBackgroundResource(R.drawable.ic_launcher); 

         break; 

        case R.layout.fourth: 
         Toast.makeText(getApplicationContext(), "fourth", Toast.LENGTH_SHORT).show(); 
         iv4.setBackgroundResource(R.drawable.ic_launcher); 

         break; 

        case R.layout.fifth: 
         Toast.makeText(getApplicationContext(), "fifth", Toast.LENGTH_SHORT).show(); 

         iv5.setBackgroundResource(R.drawable.ic_launcher); 

         break; 
        default: 
         break; 
        } 


        mPosition++; 
        mButton = (Button)findViewById(R.id.btnid); 
        mButton.setOnClickListener(mListener); 
       } 

      }, 2050); 
     } 
    }; 


        mPosition++; 
        mButton = (Button)findViewById(R.id.btnid); 
        mButton.setOnClickListener(mListener); 
       } 
      }, 750); 
     } 
    }; 
} 

任何种类的帮助是非常有帮助的。

+0

不要切换对'mPosition'如果你要测试其对布局的ID。如果你想测试布局ID,使用'switch(mLayouts.get(mPosition))'。 – Luksprog 2013-03-14 12:44:48

+0

嗨,在上面编辑,切换与“开关(mlayouts.get(mPosition))”工作正常*仅用于吐司消息,如果我把上述Imageresources,空指针异常即将到来。 * --->切换从第二个混洗版面开始。第一个是简单的和剩下的所有作品完美地显示敬酒。任何帮助? – sai 2013-03-15 09:37:30

回答

0

您可以使用android:标记来区分按钮。

<Button 
    ... 
    android:tag="1"/> 

然后在代码检索标签

mButton = (Button)findViewById(R.id.btnid); 
int id = Integer.parseInt(mButton.getTag()); 

switch(id) { 
    ... 
} 
+0

我的不好:)编辑 – mach 2013-03-14 12:26:55