2017-01-21 4 views
0

Я пытаюсь сделать простое приложение.
У меня есть таблица с одной строкой и семью кнопками в этой строке.
Я знаю, что мне не нужен массив 2d, но я бы хотел его использовать.
Так что я могу расширить это позже очень легко.Как использовать getResources(). GetIdentifier для получения идентификатора Button?

Я использую

int resID = getResources().getIdentifier("button" + i + h, "button", getPackageName()); 

, чтобы попытаться получить идентификатор ресурса от кнопки.
Мои кнопки называются «button00, button01, button02 и т. Д. (Это точно так, как есть в R.java).
Числа представляют собой строку и столбец соответственно. Я видел, как люди использовали это раньше, но для некоторых Поэтому я никогда не могу заставить его работать.

Вот мой код класса огни

public class lights extends Activity implements OnClickListener { 
public int numRows; 
public int numCol; 


public lights(int rows, int col) { 
    numRows = rows; 
    numCol = col; 
} 


public void createButtonListeners(Button[][] button) { 
    for (int i = 0; i < numRows; i++) { 
     for (int h = 0; h < numCol; h++) { 
      int resID = getResources().getIdentifier("button" + i + h, "button", getPackageName()); 
      button[i][h] = (Button) findViewById(resID); 
      button[i][h].setOnClickListener((View.OnClickListener) this); 
      Toast.makeText(getBaseContext(), "Made listener", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 


public void reset(Array buttons[][]) { 
    for (int r = 0; r < numRows; r++) { 
     for (int c = 0; c < numCol; c++) { 

      //havnt got this far 
     } 

    } 

} 


public int wasButtonPressed() { 
    for (int row = 0; row < numRows; row++) { 


    } 

    return 0; 
} 

@Override 
public void onClick(DialogInterface dialog, int which) { 

}} 

код для Main_Activity

public class MainActivity extends Activity implements View.OnClickListener { 

lights mlights = new lights(1, 7); 
Button Button[][] = new Button[mlights.numRows][mlights.numCol]; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mlights.createButtonListeners(Button); 

} 


@Override 
public void onClick(View v) { 

}} 

у меня есть нет ошибок при вводе кода, но он не запускается.
Пожалуйста, исправьте меня любым возможным способом.

+0

Возможный дубликат [Android, получение идентификатора ресурса из строки?] (Http://stackoverflow.com/questions/4427608/android-getting-resource-id-from-string) –

ответ

1

Если вы пытаетесь получить идентификатор, второй аргумент должен быть "id".

Вы пытаетесь получить R.id значение, а не R.button значение, потому что те не существуют

Вы также реализовали неправильный клик слушателя на вашей огни деятельности (которые не должны продлить активность в любом случае, но это не связано на ваш вопрос ... Только не удивляйтесь, если ваш текущий код не работает)

Подсказка: попробуйте эту public lights(Context c, int rows, int col) и использовать c.getResources с помощью этого Context создавать свои ресурсы, или, возможно, метод setButtons(Button[][] buttons), что вы бы вызов из Activity (так как это единственное место, которое вы можете назвать findViewById)

+0

Жаль, что у меня не было R.id как аргумент. Я изменил его на R.button как возможное решение. –

+0

Итак ... Ответ работает или не работает? –

+0

Это не сработало –