【问题标题】:Listactivity With Multiple button and multiple videos具有多个按钮和多个视频的列表活动
【发布时间】:2012-08-28 12:32:01
【问题描述】:

我有一个 listactivity 应用程序,由 5 行组成,每行包含一个 TEXT 和 5 个 BUTTON, 文本和按钮都是可点击的,文本将打开 MyDay 活动,即 textview,当您单击任何按钮时,它必须打开 videoview 屏幕,如下图所示:

但我的问题是:

我可以分配五个不同的视频,通过每行的 5 个按钮打开。

我试图为每个按钮设置不同的视频,所以:

25 个按钮可打开 25 个不同的视频

我的意思是:

第一行中的(one)按钮将打开video_1

第一行中的(两个)按钮将打开video_2

第一行中的(三个)按钮将打开video_3

第一行中的(四个)按钮将打开video_4

第一行中的

按钮(五个)将打开video_5

第二行中的(one)按钮将打开video_6

第二行中的(两个)按钮将打开video_7

以此类推,直到第五行的最后一个按钮

我做不到。

任何建议将不胜感激

谢谢

我的密码:

ListButtons 类:

 public class ListButtons extends ListActivity {
String classes[] = {"First",  "Second", "Third","Fourth", "Fifth" }; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setListAdapter(new MyArrayAdapter(this, classes));  }}

MyArrayAdapter 类:

 public class MyArrayAdapter extends ArrayAdapter<String> {

private final String[] mClasses;
private Context mContext;
private Typeface tf;
private LayoutInflater mInflater;
private String[] mData = { "button1", "button2", "button3", "button4",
        "button5" };
private int[] ids = { R.id.button1, R.id.button2, R.id.button3,
        R.id.button4, R.id.button5 };
int[][] rowDrawables = { 
        {R.drawable.row_1, R.drawable.row_2, R.drawable.row_3, 
             R.drawable.row_4, R.drawable.row_5},
        {R.drawable.row_6, R.drawable.row_7, R.drawable.row_8, 
             R.drawable.row_9, R.drawable.row_10},
        {R.drawable.row_11, R.drawable.row_12, R.drawable.row_13, 
             R.drawable.row_14, R.drawable.row_15},
        {R.drawable.row_16, R.drawable.row_17, R.drawable.row_18, 
             R.drawable.row_19, R.drawable.row_20},
        {R.drawable.row_21, R.drawable.row_22, R.drawable.row_23, 
             R.drawable.row_24, R.drawable.row_25}};

public MyArrayAdapter(Context context, String[] classes) {
    super(context, 0, classes);
    mClasses = classes;
    mContext = context;
    tf = Typeface.createFromAsset(context.getAssets(), "BFantezy.ttf");
    mInflater = LayoutInflater.from(context);
                              }

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.row, null, true);
        holder = new ViewHolder();
        holder.textView = (TextView) convertView
                .findViewById(R.id.row_label);
        holder.textView.setTypeface(tf);
        holder.bt1 = (Button) convertView.findViewById(R.id.button1);
        holder.bt2 = (Button) convertView.findViewById(R.id.button2);
        holder.bt3 = (Button) convertView.findViewById(R.id.button3);
        holder.bt4 = (Button) convertView.findViewById(R.id.button4);
        holder.bt5 = (Button) convertView.findViewById(R.id.button5);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    String s = mClasses[position];
    holder.textView.setText(s);

    int[] rowDr = rowDrawables[position];
    holder.bt1.setBackgroundResource(rowDr[0]);
    holder.bt2.setBackgroundResource(rowDr[1]);
    holder.bt3.setBackgroundResource(rowDr[2]);
    holder.bt4.setBackgroundResource(rowDr[3]);
    holder.bt5.setBackgroundResource(rowDr[4]);

    holder.textView.setTag(Integer.valueOf(position));
    holder.textView.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            Integer pos = (Integer) v.getTag();
            Intent ourIntent = new Intent(mContext, MyDay.class);
            ourIntent.putExtra("cheese", mClasses[pos]);
            mContext.startActivity(ourIntent);
                       }
                       });
    holder.bt1.setOnClickListener(mListener);
    holder.bt2.setOnClickListener(mListener);
    holder.bt3.setOnClickListener(mListener);
    holder.bt4.setOnClickListener(mListener);
    holder.bt5.setOnClickListener(mListener);
    return convertView;
                   }

static class ViewHolder {
    TextView textView;
    Button bt1, bt2, bt3, bt4, bt5;

                     }

private OnClickListener mListener = new OnClickListener() {

    public void onClick(View v) {
        String night = null;
        for (int i = 0; i < ids.length; i++) {
            if (v.getId() == ids[i]) {
                night = mData[i];
                break;
            }
        }
        Intent i = new Intent(mContext, My_videos.class);
        i.putExtra("video", night);
        mContext.startActivity(i);
                                   }
                                   };

                                }

My_videos 类:

  public class My_videos extends Activity {  
private VideoView vid;  
String night;  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.video); 

    Bundle bdl = getIntent().getExtras(); 
    night = bdl.getString("video");   
    vid = (VideoView) findViewById(R.id.videoView1); 

    if (night.equalsIgnoreCase("button1")) {    
    vid.setVideoURI(Uri.parse("android.resource://" + getPackageName()
                + "/" + R.raw.video_1));
        vid.setMediaController(new MediaController(My_videos.this));  
        vid.requestFocus();    
        vid.start(); }  

         else if (night.equalsIgnoreCase("button2")) {   
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                + "/" + R.raw.video_2)); 
         vid.setMediaController(new MediaController(My_videos.this));
             vid.requestFocus(); 
             vid.start(); } 

         else if (night.equalsIgnoreCase("button3")) { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                + "/" + R.raw.video_3)); 
         vid.setMediaController(new MediaController(My_videos.this));
             vid.requestFocus();
             vid.start();         } 
         else if (night.equalsIgnoreCase("button4")) { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                  + "/" + R.raw.video_4)); 
         vid.setMediaController(new MediaController(My_videos.this)); 
             vid.requestFocus();     
             vid.start(); }         
         else if (night.equalsIgnoreCase("button5")) {   
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName()  
                  + "/" + R.raw.video_5)); 
         vid.setMediaController(new MediaController(My_videos.this));   
             vid.requestFocus();      
             vid.start(); }  

                        }}       

更新:

我尝试修改 My_videos 类,如下代码,但它以 为每个按钮显示相同的视频结尾,即 (video_5)。

  public class My_videos extends Activity {  
private VideoView vid;  
String night;
private int position;  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.video); 

    Bundle bdl = getIntent().getExtras(); 
    night = bdl.getString("video");   
    vid = (VideoView) findViewById(R.id.videoView1); 


 if(position == 0){ 
        night.equalsIgnoreCase("button1"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                     + "/" + R.raw.video_1));
        vid.setMediaController(new MediaController(My_videos.this));
        vid.requestFocus();
        vid.start(); }      
          if(position == 0){ 
       night.equalsIgnoreCase("button2"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                   + "/" + R.raw.video_2));
        vid.setMediaController(new MediaController(My_videos.this));
        vid.requestFocus();
        vid.start(); }  }            
          if(position == 0){ 
        night.equalsIgnoreCase("button3"); { 
       vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                       + "/" + R.raw.video_3));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }                
     if(position == 0){ 
      night.equalsIgnoreCase("button4"); { 
         vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                     + "/" + R.raw.video_4));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }                    
      if(position == 0){ 
        night.equalsIgnoreCase("button5"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                    + "/" + R.raw.video_5));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); }}

else if(position == 1){ 
       night.equalsIgnoreCase("button1"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName()  
                   + "/" + R.raw.video_6));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }   
    if(position == 1){ 
         night.equalsIgnoreCase("button2"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                     + "/" + R.raw.video_7));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }            
    if(position == 1){ 
        night.equalsIgnoreCase("button3"); { 
         vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                       + "/" + R.raw.video_8));
              vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }                
    if(position == 1){ 
       night.equalsIgnoreCase("button4"); { 
         vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                     + "/" + R.raw.video_9));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }                    
    if(position == 1){ 
        night.equalsIgnoreCase("button5"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                   + "/" + R.raw.video_10));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); }}


 else if(position == 2){ 
        night.equalsIgnoreCase("button1"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                       + "/" + R.raw.video_11));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); }     }
    if(position == 2){ 
          night.equalsIgnoreCase("button2"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                 + "/" + R.raw.video_12));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }            
    if(position == 2){ 
        night.equalsIgnoreCase("button3"); { 
         vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                      + "/" + R.raw.video_13));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); }     }            
    if(position == 2){ 
         night.equalsIgnoreCase("button4"); { 
         vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                     + "/" + R.raw.video_14));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }                    
     if(position == 2){ 
      night.equalsIgnoreCase("button5"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                     + "/" + R.raw.video_15));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); }}

else if(position == 3){ 
      night.equalsIgnoreCase("button1"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                    + "/" + R.raw.video_16));
         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }   
      if(position == 3){ 
         night.equalsIgnoreCase("button2"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                      + "/" + R.raw.video_17));

               vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }            
      if(position == 3){ 
      night.equalsIgnoreCase("button3"); { 
         vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                 + "/" + R.raw.video_18));

             vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }                
      if(position == 3){ 
      night.equalsIgnoreCase("button4"); { 
         vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                         + "/" + R.raw.video_19));  

         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }                
      if(position == 3){ 
      night.equalsIgnoreCase("button5"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                       + "/" + R.raw.video_20));    

         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); }}             

 else if(position == 4){ 

    night.equalsIgnoreCase("button1"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                 + "/" + R.raw.video_21));
     vid.setMediaController(new MediaController(My_videos.this));
     vid.requestFocus();
     vid.start(); } }   
    if(position == 4){  

        night.equalsIgnoreCase("button2"); { 

    vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" 
               + R.raw.video_22));


                   vid.setMediaController(new MediaController(My_videos.this));
             vid.requestFocus();
         vid.start(); } }            
  if(position == 4){    

             night.equalsIgnoreCase("button3"); { 
         vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                    + "/" + R.raw.video_23));
                vid.setMediaController(new MediaController(My_videos.this));
          vid.requestFocus();
          vid.start(); }    }                
 if(position ==4){  
       night.equalsIgnoreCase("button4"); { 

        vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                  + "/" + R.raw.video_24));

         vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); } }

  if(position == 4){    
      night.equalsIgnoreCase("button5"); { 
     vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() 
                + "/" + R.raw.video_25));   

           vid.setMediaController(new MediaController(My_videos.this));
         vid.requestFocus();
         vid.start(); }}
              }}

【问题讨论】:

  • 使用列表视图的原因是什么?当然,如果它固定为 5 行,它有点不必要吗?
  • @jiduvah 这是大型项目中的主要应用程序,由 25 行组成,每行文本将打开复杂的布局,每行将有不少于 15 个视频,所以它必须是列表视图
  • @Archie.bpgc 这是大型项目中的主要应用程序,由 25 行组成,每行文本将打开复杂的布局,每行将有不少于 15 个视频,因此它必须是列表视图
  • 您的问题是您在所有行中都为一键获得相同的视频??
  • @Archie.bpgc 绝对正确的按钮(一个)在所有行中打开相同的视频和按钮(两个)在所有行中打开相同的视频,但肯定与按钮(一个)打开的视频不同,依此类推

标签: android android-intent


【解决方案1】:

在此链接https://gist.github.com/3463215 我已经发布了My_videos 课程的一个版本,它可以满足您的需求。基本上,在MyArrayAdapter 类中,当单击Button 时,您将在Intent 中发送单击该按钮的行+ 在该行中单击的确切Button。然后在My_videos 类中,您将获得这些数字并在数组数据结构的数组中轻松找到正确的视频。

【讨论】:

    【解决方案2】:

    所有的都得到相同的视频,所有的两个都得到相同的视频,依此类推,因为所有行中所有的 ID 都相同,依此类推。

    所以,在 onClick 中执行此操作:

    public void onClick(View v) {
            String night = null;
            int position = yourListView.getPositionForView((View) v.getParent())
            for (int i = 0; i < ids.length; i++) {
                if (v.getId() == ids[i]) {
                    night = mData[i];
                    break;
                }
            }
    }
    

    现在将此职位也添加为您的意图的额外内容。这样你就会知道点击了哪一行等等。

    【讨论】:

    • 你的意思是替换这段代码:public void onClick(View v) { String night = null; for (int i = 0; i
    • 是的。当您将适配器设置为您的 ListView 时。还将该 ListView 作为参数提供给 MyArrayAdapter。现在使用此 ListView,您可以使用上面的代码获取单击了哪个按钮的行。使用此行位置和文本之夜,您可以显示各自的视频
    • 这将导致当按下每个按钮时将为 25 个按钮打开不同的视频,这意味着我将为 25 个不同的视频分配 25 个按钮
    • 看。你有 5 行,每行有 5 个按钮。所以总共有 25 个不同的按钮(但您不能仅使用那里的 ID 来区分它们,因为您只有 5 个 ID,每个 ID 分配给特定行中的按钮)。因此,要区分所有 25 个按钮,请使用该按钮所属行的索引。所以你可以有这样的“if position = 0 and night = button1”意味着点击了第一行的button1,所以播放第一个视频。 "if position = 4 and night = button5" 表示点击了第 5 行的 button5,所以播放第 25 个视频。
    • 是的,这是我想要的,我也尝试了这段代码但不起作用,我不是 android 专家:if(position == 0){ night.equalsIgnoreCase("button1"); { vid.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.video_1)); vid.setMediaController(新媒体控制器(My_videos.this)); vid.requestFocus(); vid.start(); }
    【解决方案3】:

    您有 5 个按钮、25 个链接、5 行,如果您设置 5 个侦听器(每个按钮 1),您可以像这样选择 uri:

    button1,button2,button3,button4,button5;
    
    button1.setOnclickListener(new View.onClickListener{
        public void onClick(View v){
            Integer pos = (Integer) v.getTag();
            Intent ourIntent = new Intent(mContext, MyDay.class);
            ourIntent.putExtra("cheese", mClasses[rowPosition*5+buttonPostion]);
            mContext.startActivity(ourIntent);
        }
    });
    

    rowPosition=in getView(position) 是简单的当前 convertView 编号,按钮位置是您的 v.getTag() 按钮编号现在是 1。

    这个你可以选择 25 个链接:例如,当你在你的 2 行中点击时,第 3 个按钮的链接 ID 将为 2*5+3=13。因此,在您的第二行中,3 按钮将播放 13 链接。

    【讨论】:

      猜你喜欢
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2015-07-24
      • 2013-06-11
      相关资源
      最近更新 更多