Android上的Clickable TableRow

问题描述 投票:2回答:6

我有一个简单的程序,我已经用Java为android编写了程序,但是很难使tablerow可点击。当用户单击一行时,我希望某个图片显示在下面的imageview中。这是我的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将根据单击的行显示不同的图像。任何帮助将不胜感激

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

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
6个回答
3
投票

简单地给每个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()


添加您需要调用findViewById() after,用setContentView()中的onCreate()声明布局。

ImageView imagev;

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

2
投票

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

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

0
投票

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


0
投票

像第1行一样将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");
                    }
                });

        }
        }

0
投票

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


0
投票
  1. 在XML布局文件中为Tablerow分配ID:

© www.soinside.com 2019 - 2024. All rights reserved.