0

私はlistactivityアプリを持っており、各行はTEXTとBUTTONを含んでおり、テキストとボタンの両方がクリック可能でなければなりません(何を取得しようとしていますか)。テキストをクリックするとMyDayアクティビティが開き、ボタンをクリックするとMy_videosアクティビティが開きます。

アプリを開いて任意のボタンをクリックすると正確に何が起こるか、すべての行のどのボタンでもクリック アクションは行われませんが、任意の行のテキストをクリックすると MyDay アクティビティが開き、 最初の行の任意のボタンのみがクリックされます。 videoview である My_videos アクティビティを開きますが、同時に他のボタンは残りの行でクリックできません。

アドバイスをいただければ幸いです。

ありがとう。

私のコード:

MyArrayAdapter クラス:

 public class MyArrayAdapter extends ArrayAdapter<String> {
private final Activity context;
private final String[] classes;
Button bt1, bt2, bt3, bt4, bt5;   

Typeface tf;

public MyArrayAdapter(Activity context, String[] classes) {
    super(context, R.layout.row, classes);
    this.context = context;
    this.classes = classes;
              }

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    tf=Typeface.createFromAsset(context.getAssets(),"BFantezy.ttf"); 
    LayoutInflater inflater = context.getLayoutInflater();
    View rowView = inflater.inflate(R.layout.row, null, true);
    TextView textView = (TextView) rowView.findViewById(R.id.row_label);
    Button bt1=(Button) rowView.findViewById(R.id.button1); 
    Button bt2=(Button) rowView.findViewById(R.id.button2); 
    Button bt3=(Button) rowView.findViewById(R.id.button3); 
    Button bt4=(Button) rowView.findViewById(R.id.button4); 
    Button bt5=(Button) rowView.findViewById(R.id.button5); 

    String s = classes[position];
    textView.setText(s);
    ((TextView)textView).setTypeface(tf); 


if ( s.startsWith("First")) {

    bt1.setBackgroundResource(R.drawable.ic_launcher);
    bt2.setBackgroundResource(R.drawable.ic_launcher); 
    bt3.setBackgroundResource(R.drawable.ic_launcher); 
    bt4.setBackgroundResource(R.drawable.ic_launcher); 
    bt5.setBackgroundResource(R.drawable.ic_launcher); }

if ( s.startsWith("Second")) {

    bt1.setBackgroundResource(R.drawable.ic_launcher); 
    bt2.setBackgroundResource(R.drawable.ic_launcher); 
    bt3.setBackgroundResource(R.drawable.ic_launcher); 
    bt4.setBackgroundResource(R.drawable.ic_launcher); 
    bt5.setBackgroundResource(R.drawable.ic_launcher); }    

if ( s.startsWith("Third")) {

    bt1.setBackgroundResource(R.drawable.ic_launcher); 
    bt2.setBackgroundResource(R.drawable.ic_launcher); 
    bt3.setBackgroundResource(R.drawable.ic_launcher); 
    bt4.setBackgroundResource(R.drawable.ic_launcher); 
    bt5.setBackgroundResource(R.drawable.ic_launcher); }        

if ( s.startsWith("Fourth")) {

    bt1.setBackgroundResource(R.drawable.ic_launcher); 
    bt2.setBackgroundResource(R.drawable.ic_launcher); 
    bt3.setBackgroundResource(R.drawable.ic_launcher); 
    bt4.setBackgroundResource(R.drawable.ic_launcher); 
    bt5.setBackgroundResource(R.drawable.ic_launcher); }    

if ( s.startsWith("Fifth")) {

    bt1.setBackgroundResource(R.drawable.ic_launcher); 
    bt2.setBackgroundResource(R.drawable.ic_launcher); 
    bt3.setBackgroundResource(R.drawable.ic_launcher); 
    bt4.setBackgroundResource(R.drawable.ic_launcher); 
    bt5.setBackgroundResource(R.drawable.ic_launcher); }        

return rowView;  }}

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.b));
         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.bb)); 
         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.bbb)); 
         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.bbbb)); 
         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.bbbbb)); 
         vid.setMediaController(new MediaController(My_videos.this));   
             vid.requestFocus();      
             vid.start(); }  

                                      } } 
4

2 に答える 2

0

リスナーを正しく設定していません。リスナーが機能するには、行を1回クリックしてListView、とのリスナーを実際に設定する必要がButtonsありTextViewます。getView正しい方法は、ビューをレイアウトするときにメソッドにリスナーを設定することです。

onListItemClickまず、コールバックにあるコードを削除してから、アダプターを変更します。私はあなたのアダプターをより効率的なバージョンに書き直しました(より多くの改善がなされるかもしれませんが)。コードが大きいので、ここで新しいアダプターを見つけることができますhttps://gist.github.com/3463215。これがあなたが望むものであるかどうかを確認してください。

R.layout.videoレイアウトファイル:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

<LinearLayout  android:layout_width="match_parent"
    android:layout_height="wrap_content" >
<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="One" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
     android:text="Two" />

<Button
    android:id="@+id/button3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="three" />

<Button
    android:id="@+id/button4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Four" />

<Button
    android:id="@+id/button5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Five" />

</LinearLayout>

<VideoView
    android:id="@+id/videoView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

</LinearLayout>
于 2012-08-25T10:12:17.970 に答える
0

onItemCLIk メソッドでクリックリスナーを定義する際に間違っています

ベースアダプターのgetViewメソッドでTextViewとButtonのCLickリスナーを設定するだけです.......つまり、OnItemClikcメソッドからすべてのクリックリスナーを削除します

public View getView(final int position, View convertView, ViewGroup parent) {
    tf=Typeface.createFromAsset(context.getAssets(),"BFantezy.ttf"); 
    LayoutInflater inflater = context.getLayoutInflater();
    View rowView = inflater.inflate(R.layout.row, null, true);
    TextView textView = (TextView) rowView.findViewById(R.id.row_label);
    textView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            // do what ever do want to ie open activity 
            //must use postion to get that item  
        }
    });
    Button bt1=(Button) rowView.findViewById(R.id.button1); 
    bt1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent();    
            intent.setClass(ListButton.this, My_videos.class); 
            //this will send the respective  string to intent class ; 
            intent.putExtra("video", classes[position].toString);

        }
    });
return rowView;  }}
于 2012-08-23T08:51:00.927 に答える