2012-11-01 20 views
2

我有一個簡單的程序,我在java中爲android做出的,但是在使得tablerow可點擊時遇到困難。當用戶點擊一行時,我希望在下面的圖像視圖中顯示某個圖片。這裏是我的XML代碼:Android上的可點擊桌面行

 <?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將顯示這取決於被點擊哪一行不同的圖像。任何幫助將不勝感激

薩姆建議我ammended我的代碼如下:

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; 
     } 
    } 
    } 

,但現在我已經在運行的類空指針異常。所有編譯罰款雖然

回答

2

給每行一個ID,那麼你就可以監聽器分配給每一個在你的代碼:

TableRow row = (TableRow)findViewById(R.id.row1); 
row.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     //Do Stuff 
    } 
}); 
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()onCreate()setContentView()聲明佈局。

ImageView imagev; 

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

我已經改變了我的代碼如下:公共類科亞延伸活動{ 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: imagev.setImageResource(R.drawable.android_normal); 休息; } } }但在運行時產生空指針異常 – user1505181

+1

請參閱我編輯的第一篇文章山姆,因爲評論框不像代碼 – user1505181

+0

是的,評論有最小的標記功能。感謝您將代碼添加到您的問題中,我希望更新能夠讓答案清楚。 – Sam

0

您需要爲每個TableRow對象調用setOnClickListener(),以便框架知道單擊某行時該做什麼。另外你的Activity應該實現View.OnClickListener(),這樣你就可以控制點擊某一行時會發生什麼。現在,當視圖被點擊時你沒有做任何事情;至少根據您的代碼,你不能在任何的意見onClickListeners

0

給ID的註冊的回調爲tablerow就像ROW1

<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

我得到它由公共無效rowclick內聲明的ImageView變量工作

相關問題