2014-04-18 46 views
5

我有一個帶按鈕的3x3 GridLayout。這些按鈕有一個onTileClicked()偵聽器。現在我想要獲取網格中單擊按鈕的位置。這是我的代碼:Android GridLayout獲取行/列

public void onTileClicked(View view) { 
    Button button = (Button) view; 
    GridLayout.LayoutParams params = (LayoutParams) button.getLayoutParams(); 
} 

但是我怎樣才能得到點擊按鈕的行和列?有params.columnSpec但我不知道該怎麼辦...

回答

5

有沒有直接的方式來獲得單元格的位置。但是,你可以計算出點擊的按鈕位置假設你知道列和行的在onItemClick聽衆數量:

public void onItemClick(AdapterView parent, 
     View v, int position, long id) 
    { 
     int row_no=position/3; 
     int col_no=position%3; 
     . 
     . 
    } 
+1

我不明白如何項目可以有一個位置,它不是一個gridView ... – akari

2

謝謝您的回答AmmarCSE,但我剛好做這樣的事情解決了broblem:

public void onTileClicked(View view) { 
    Button button = (Button) view; 
    if(button.getId()==R.id.btn00)onTileClicked(0, 0, button); 
    else if(button.getId()==R.id.btn01)onTileClicked(0, 1, button); 
    else if(button.getId()==R.id.btn02)onTileClicked(0, 2, button); 
    else if(button.getId()==R.id.btn10)onTileClicked(1, 0, button); 
    else if(button.getId()==R.id.btn11)onTileClicked(1, 1, button); 
    else if(button.getId()==R.id.btn12)onTileClicked(1, 2, button); 
    else if(button.getId()==R.id.btn20)onTileClicked(2, 0, button); 
    else if(button.getId()==R.id.btn21)onTileClicked(2, 1, button); 
    else if(button.getId()==R.id.btn22)onTileClicked(2, 2, button); 
} 
+1

AmmarCSE的方式是更好清楚,與您的代碼,你應該使用開關 –

1

這可能是舊的,但我也尋找一個解決方案,仍然沒有找到它。 我需要根據用戶對遊戲的選擇製作多行按鈕。使用ID是不可能的,因爲按鈕的數量可能從2x2到9x9不等。

我的按鈕並不需要有一個標題,所以這裏是我做過什麼:

layout = (GridLayout) findViewById(R.id.layoutPrincipal); 
    context = this;   
    for(int i=0;i<rowCount;i++){ 
     for(int j=0;j<columnCount;j++){ 
      Button mButon= new Button(this); 
      mButon.setText(""+i+""+j); 
      mButon.setTextColor(Color.TRANSPARENT); 

      mButon.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Button button = (Button) v; 


        //button.getText() allows me to retrieve the coordinates. 

        button.getText() 

       } 
      });  
      layout.addView(mButon); 

     } 
    } 

當然,如果你需要在你的按鈕文本,這將無法正常工作。也許你可以使用標籤?

0

我面臨同樣的問題,目前讓我感到舒服的唯一解決方案是修改類並添加所需的任何信息。 我的例子是

class ImageView extends android.widget.ImageView { 
    public ImageView(Context context) { 
     super(context); 
    } 

    //the position of the plane head. 
    int xPos,yPos; 

    public void setPosInGrid(int x,int y) { 
     xPos=x;yPos=y; 
    } 

    public int[] getPosInGrid() { 
     int[] pos=new int[2]; 
     pos[0]=xPos; 
     pos[1]=yPos; 
     return pos; 
    } 
} 

現在我們可以使用這個額外的功能。我們也可以重寫setLayoutParams並將setPosInGrid()集成到它中。 除了當你想要一個普通的ImageView只使用完整的標識符「androi.widget.ImageView」時,不需要修改其他代碼。