Кнопка Android Studio Finding от String [дубликат]

TL; DR: Попробуйте использовать Html.Partial вместо Renderpage


Я получал Object reference not set to an instance of an object, когда пытался сделать вид в представлении, отправив ему модель, например это:

@{
    MyEntity M = new MyEntity();
}
@RenderPage("_MyOtherView.cshtml", M); // error in _MyOtherView, the Model was Null

Отладка показала, что модель была Null внутри MyOtherView. Пока я не сменил его на:

@{
    MyEntity M = new MyEntity();
}
@Html.Partial("_MyOtherView.cshtml", M);

И это сработало.

Кроме того, причина, по которой я не имел Html.Partial для начала, заключалась в том, что Visual Studio иногда выдает ошибки, (f9), если он находится внутри другого построенного цикла foreach, хотя это не ошибка:

@inherits System.Web.Mvc.WebViewPage
@{
    ViewBag.Title = "Entity Index";
    List<MyEntity> MyEntities = new List<MyEntity>();
    MyEntities.Add(new MyEntity());
    MyEntities.Add(new MyEntity());
    MyEntities.Add(new MyEntity());
}
<div>
    @{
        foreach(var M in MyEntities)
        {
            // Squiggly lines below. Hovering says: cannot convert method group 'partial' to non-delegate type Object, did you intend to envoke the Method?
            @Html.Partial("MyOtherView.cshtml");
        }
    }
</div>

Но я смог запустить приложение без проблем с этим " ошибка". Я смог избавиться от ошибки, изменив структуру цикла foreach, чтобы выглядеть так:

@foreach(var M in MyEntities){
    ...
}

Хотя я чувствую, что это потому, что Visual Studio неправильно интерпретировала амперсанды и скобки .

54
задан Heiko Rupp 1 February 2011 в 17:56
поделиться

7 ответов

Вы должны использовать getIdentifier()

for(int i=0; i<some_value; i++) {
   for(int j=0; j<some_other_value; j++) {
    String buttonID = "btn" + i + "-" + j;
    int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
    buttons[i][j] = ((Button) findViewById(resID));
    buttons[i][j].setOnClickListener(this);
   }
}
92
ответ дан WarrenFaith 24 August 2018 в 00:12
поделиться

Если по какой-либо причине вы не можете использовать функцию getIdentifier() и / или вы знаете, что возможно, это возможно, вы можете использовать переключатель.

int id = 0;

switch(name) {
    case "x":
        id = R.id.x;
        break;
    etc.etc.
}

String value = findViewById(id);
1
ответ дан B.Cakir 24 August 2018 в 00:12
поделиться

вы можете использовать тег, если хотите получить доступ.

в onClick

int i=Integer.parseInt(v.getTag);

Но вы не можете получить доступ к этой кнопке, как это.

просто создайте кнопку программно

на Button b=new Button(this);

2
ответ дан cricket_007 24 August 2018 в 00:12
поделиться

Если ваш вид верхнего уровня имеет только эти представления кнопок в качестве дочерних элементов, вы можете сделать

for (int i = 0 ; i < yourView.getChildCount(); i++) {
    Button b = (Button) yourView.getChildAt(i);
    b.setOnClickListener(xxxx);
}

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

1
ответ дан Heiko Rupp 24 August 2018 в 00:12
поделиться

Вы можете попробовать сделать int [], который содержит все ваши идентификаторы кнопок, а затем перебирать это:

int[] buttonIDs = new int[] {R.id.button1ID, R.id.button2ID, R.id.button3ID, ... }

for(int i=0; i<buttonIDs.length; i++) {
    Button b = (Button) findViewById(buttonIDs[i]);
    b.setOnClickListener(this);
}
4
ответ дан Rick Barkhouse 24 August 2018 в 00:12
поделиться

создать пользовательскую кнопку в Java-коде, а в Xml, как показано ниже

Button bs_text[]= new Button[some_value];

    for(int z=0;z<some_value;z++)
        {
            try
            {

            bs_text[z]   =  (Button) new Button(this);

            }
            catch(ArrayIndexOutOfBoundsException e)
            {
                Log.d("ArrayIndexOutOfBoundsException",e.toString());
            }
        }
1
ответ дан Sankar Ganesh 24 August 2018 в 00:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: