【问题标题】:Clickable TableRow on AndroidAndroid 上的可点击 TableRow
【发布时间】:2012-11-01 19:52:37
【问题描述】:

我有一个用 java 为 android 制作的简单程序,但在使 tablerow 可点击时遇到了困难。当用户单击一行时,我希望某张图片显示在下面的图像视图中。这是我的xml代码:

     <?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FF909090"
    android:stretchColumns="1" >

    <TableRow>

        <TextView
            android:layout_margin="2dip"
            android:layout_marginRight="2dip"
            android:background="#0000ff"
            android:padding="3dip"
            android:text="I" />

        <TextView
            android:layout_margin="2dip"
            android:layout_marginLeft="1dip"
            android:background="#0000ff"
            android:gravity="center"
            android:padding="3dip"
            android:text="A"
            android:onClick="Achord" />
    </TableRow>

    <TableRow>

        <TextView
            android:layout_column="0"
            android:layout_margin="2dip"
            android:background="#0000ff"
            android:padding="3dip"
            android:text="II" />

        <TextView
            android:layout_margin="2dip"
            android:background="#0000ff"
            android:gravity="center"
            android:padding="3dip"
            android:text="Bm" />
    </TableRow>

    <TableRow>

        <TextView
            android:layout_column="0"
            android:layout_margin="2dip"
            android:background="#0000ff"
            android:padding="3dip"
            android:text="III" />

        <TextView
            android:layout_margin="2dip"
            android:background="#0000ff"
            android:gravity="center"
            android:padding="3dip"
            android:text="C#m" />
    </TableRow>

    <View
        android:layout_height="2dip"
        android:background="#FF909090" />

    <TableRow android:background="#0000ff" >
    </TableRow>

    <TableRow>

        <TextView
            android:layout_margin="2dip"
            android:background="#0000ff"
            android:padding="3dip"
            android:text="IV" />

        <TextView
            android:layout_margin="2dip"
            android:background="#0000ff"
            android:gravity="center"
            android:padding="3dip"
            android:text="D" />
    </TableRow>

    <View
        android:layout_height="2dip"
        android:background="#FF909090" />

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </TableRow>

    <TableRow>

        <TextView
            android:layout_margin="2dip"
            android:layout_marginRight="2dip"
            android:background="#0000ff"
            android:padding="3dip"
            android:text="V" />

        <TextView
            android:layout_margin="2dip"
            android:layout_marginLeft="1dip"
            android:background="#0000ff"
            android:gravity="center"
            android:padding="3dip"
            android:text="E" />
    </TableRow>

    <TableRow>

        <TextView
            android:layout_margin="2dip"
            android:layout_marginRight="2dip"
            android:background="#0000ff"
            android:padding="3dip"
            android:text="VI" />

        <TextView
            android:layout_margin="2dip"
            android:layout_marginLeft="1dip"
            android:background="#0000ff"
            android:gravity="center"
            android:padding="3dip"
            android:text="F#m" />
    </TableRow>

    <TableRow>

        <TextView
            android:layout_margin="2dip"
            android:layout_marginRight="2dip"
            android:background="#0000ff"
            android:padding="3dip"
            android:text="VII" />

        <TextView
            android:layout_margin="2dip"
            android:layout_marginLeft="1dip"
            android:background="#0000ff"
            android:gravity="center"
            android:padding="3dip"
            android:text="G#dim" />
    </TableRow>




    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.05"
        android:background="#000000"
        android:maxLines="10"
        android:text="The relative minor of the Major key of A is F#m. The 12 bar blues progression in A is: \n A | A | A | A | D | D | A | A | E | D | A | E" />


    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.03"
        android:src="@drawable/android_focused" />

这是我的java代码:

package com.coreservlets.widgets;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TableRow;
import com.welly.keychords.R;





 public class keya extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.keya);
}
}

我想要发生的是 imageview1 将根据单击的行显示不同的图像。任何帮助将不胜感激

正如 sam 建议的那样,我已将我的代码修改为:

public class keya extends Activity {

    ImageView imagev = (ImageView) findViewById(R.id.imageView1);

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.keya);
    }

    public void rowClick(View view) {
        switch(view.getId()) {
        case R.id.one:
            // Load image from Drawable folder
            imagev.setImageResource(R.drawable.android_normal); // example file for now
            break;
        }
    }
   }

但现在我在运行该类时出现空指针异常。虽然所有编译都很好

【问题讨论】:

    标签: java android tablerow


    【解决方案1】:

    只需给每个 TableRow 元素一个唯一的id 并定义一个onClick 方法:

    <TableRow
        android:id="@+id/one"
        android:onClick="rowClick">
    

    添加一个类变量imageView,它在您的布局中引用 ImageView。然后加载图片:

    public void rowClick(View view) {
        switch(view.getId()) {
        case R.id.one:
            // Load image from Drawable folder
            imageView.setImageResource(R.id.imageOne);
            break;
        }
    }
    

    了解 TableRow 中任何具有自己的onClick 方法的元素都将调用它自己的方法。例如带有android:onClick="Achord" 的TextView 将调用Achord() 而不是rowClick()


    加法
    您需要在onCreate() 中使用setContentView() 声明您的布局之后调用findViewById()

    ImageView imagev;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.keya);
        imagev = (ImageView) findViewById(R.id.imageView1);
    }
    

    【讨论】:

    • 我已将我的代码更改为: public class keya extends Activity { ImageView imagev = (ImageView) findViewById(R.id.imageView1); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);设置内容视图(R.layout.keya); } public void rowClick(View view) { switch(view.getId()) { case R.id.one: imagev.setImageResource(R.drawable.android_normal);休息; } } } 但在运行时出现空指针异常
    • 请看我编辑的第一篇文章 sam,因为评论框不喜欢代码
    • 是的,cmets 具有最少的标记功能。感谢您将代码添加到您的问题中,我希望更新可以明确答案。
    【解决方案2】:

    为每一行指定一个 ID,然后您可以为代码中的每一行分配一个侦听器:

    TableRow row = (TableRow)findViewById( R.id.row1 );
    row.setOnClickListener( new OnClickListener() {
        @Override
        public void onClick( View v ) {
            //Do Stuff
        }
    } );
    

    【讨论】:

      【解决方案3】:

      您需要为每个 TableRow 对象调用 setOnClickListener() 以便框架知道单击行时要执行的操作。此外,您的 Activity 应该实现 View.OnClickListener() 以便您可以控制单击行时发生的情况。现在,当单击 View 时,您什么都不做;至少根据您的代码,您没有在任何视图的 onClickListeners 上注册回调

      【讨论】:

        【解决方案4】:

        像 row1 一样将 id 分配给 Tablerow

        <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="#FF909090"
                android:stretchColumns="1" >
        
                <TableRow
                    android:id="@+id/row1"
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content"
        
                    >
        
                    <TextView
                        android:layout_margin="2dip"
                        android:layout_marginRight="2dip"
                        android:background="#0000ff"
                        android:padding="3dip"
                        android:text="I" />
        
                    <TextView
                        android:layout_margin="2dip"
                        android:layout_marginLeft="1dip"
                        android:background="#0000ff"
                        android:gravity="center"
                        android:padding="3dip"
                        android:text="A"
                        android:onClick="Achord" />
                </TableRow>
        
                <TableRow>
        
                    <TextView
                        android:layout_column="0"
                        android:layout_margin="2dip"
                        android:background="#0000ff"
                        android:padding="3dip"
                        android:text="II" />
        
                    <TextView
                        android:layout_margin="2dip"
                        android:background="#0000ff"
                        android:gravity="center"
                        android:padding="3dip"
                        android:text="Bm" />
                </TableRow>
        
                <TableRow>
        
                    <TextView
                        android:layout_column="0"
                        android:layout_margin="2dip"
                        android:background="#0000ff"
                        android:padding="3dip"
                        android:text="III" />
        
                    <TextView
                        android:layout_margin="2dip"
                        android:background="#0000ff"
                        android:gravity="center"
                        android:padding="3dip"
                        android:text="C#m" />
                </TableRow>
        
                <View
                    android:layout_height="2dip"
                    android:background="#FF909090" />
        
                <TableRow android:background="#0000ff" >
                </TableRow>
        
                <TableRow>
        
                    <TextView
                        android:layout_margin="2dip"
                        android:background="#0000ff"
                        android:padding="3dip"
                        android:text="IV" />
        
                    <TextView
                        android:layout_margin="2dip"
                        android:background="#0000ff"
                        android:gravity="center"
                        android:padding="3dip"
                        android:text="D" />
                </TableRow>
        
                <View
                    android:layout_height="2dip"
                    android:background="#FF909090" />
        
                <TableRow
                    android:id="@+id/tableRow1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" >
                </TableRow>
        
                <TableRow>
        
                    <TextView
                        android:layout_margin="2dip"
                        android:layout_marginRight="2dip"
                        android:background="#0000ff"
                        android:padding="3dip"
                        android:text="V" />
        
                    <TextView
                        android:layout_margin="2dip"
                        android:layout_marginLeft="1dip"
                        android:background="#0000ff"
                        android:gravity="center"
                        android:padding="3dip"
                        android:text="E" />
                </TableRow>
        
                <TableRow>
        
                    <TextView
                        android:layout_margin="2dip"
                        android:layout_marginRight="2dip"
                        android:background="#0000ff"
                        android:padding="3dip"
                        android:text="VI" />
        
                    <TextView
                        android:layout_margin="2dip"
                        android:layout_marginLeft="1dip"
                        android:background="#0000ff"
                        android:gravity="center"
                        android:padding="3dip"
                        android:text="F#m" />
                </TableRow>
        
                <TableRow>
        
                    <TextView
                        android:layout_margin="2dip"
                        android:layout_marginRight="2dip"
                        android:background="#0000ff"
                        android:padding="3dip"
                        android:text="VII" />
        
                    <TextView
                        android:layout_margin="2dip"
                        android:layout_marginLeft="1dip"
                        android:background="#0000ff"
                        android:gravity="center"
                        android:padding="3dip"
                        android:text="G#dim" />
                </TableRow>
        
        
        
        
                <TextView
                    android:id="@+id/textView1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="0.05"
                    android:background="#000000"
                    android:maxLines="10"
                    android:text="The relative minor of the Major key of A is F#m. The 12 bar blues progression in A is: \n A | A | A | A | D | D | A | A | E | D | A | E" />
        
        
                <ImageView
                    android:id="@+id/imageView1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="0.03" />
                </TableLayout>
        

        像这样在活动中调用它。

                import android.app.Activity;
                import android.content.Intent;
                import android.os.Bundle;
                import android.view.View;
                import android.widget.TableRow;
                import com.welly.keychords.R;
        
                public class keya extends Activity {
                    TableRow row1;
        
        
                @Override
                public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.keya);
                row1 = (TableRow) findViewById(R.id.row1);
                        row1.setOnClickListener(new OnClickListener() {
        
                            @Override
                            public void onClick(View arg0) {
                                // TODO Auto-generated method stub
                                Log.e("Click ", "Row 1");
                            }
                        });
        
                }
                }
        

        【讨论】:

          【解决方案5】:

          我通过在 public void rowclick 中声明 imageview 变量来使其工作

          【讨论】:

            【解决方案6】:
            1. 在 xml 布局文件中为 Tablerow 分配一个 id:

               <TableRow
                      android:id="@+id/rowL1"
                      ...
               </TableRow>
              
            2. 在您的 java 文件中添加以下内容:

              private TableRow rowL1;  
              
              //In onCreateView...
              rowL1 = (TableRow) rootView.findViewById(R.id.rowL1);
              rowL1.setOnClickListener(v -> {
                  //Your code here...
              });
              

            【讨论】:

              猜你喜欢
              • 2011-12-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-10-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-11-24
              相关资源
              最近更新 更多