AlertDialog внутри кнопки не работает в фрагменте [дубликат]

К сожалению, @Html.DropDownListFor() ведет себя несколько иначе, чем другие помощники при рендеринге элементов управления в цикле. Об этом ранее сообщалось как о проблеме с CodePlex (не уверен, что ее ошибка или просто ограничение)

. Это 2 варианта для решения этой проблемы, чтобы обеспечить выбор правильной опции на основе свойства модели

Вариант 1 (с использованием EditorTemplate)

Создайте пользовательский EditorTemplate для типа в коллекции. Создайте парциальное значение в /Views/Shared/EditorTemplates/AggregationLevelConfiguration.cshtml (обратите внимание, что имя должно соответствовать имени типа

@model yourAssembly.AggregationLevelConfiguration
@Html.DropDownListFor(m => m.HelperCodeType, (SelectList)ViewData["CodeTypeItems"])
.... // other properties of AggregationLevelConfiguration

, а затем в главном представлении передать SelectList в EditorTemplate как additionalViewData

@using (Html.BeginForm())
{
  ...
  @Html.EditorFor(m => m.Configurations , new { CodeTypeItems = Model.CodeTypeItems })
  ...

Вариант 2 (сгенерируйте новую SelectList на каждой итерации и установите selectedValue)

В этом параметре ваше свойство CodeTypeItems должно быть IEnumerable<GenericIdNameType>, а не SelectList (или просто сделать codeTypes общедоступным свойством). Затем в главном представлении

@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, new SelectList(Model.CodeTypeItems, "Id", "Name", Model.Configurations[0].HelperCodeType)

Сторона примечания: нет необходимости использовать new { id = "Configurations[0].HelperCodeType" - метод DropDownListFor() уже сгенерированный атрибут id

6
задан reedts 19 September 2013 в 13:02
поделиться

4 ответа

Я думаю, что проблема здесь в вашем коде

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{ 
.....
....
 //problem is here below line
 return inflater.inflate(R.layout.input_fgmt, container, false);
}

возвращает уже завышенный вид

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    { 
    .....
    ....

     return InputFragmentView;
    }
24
ответ дан Mukesh Kumar Singh 20 August 2018 в 07:05
поделиться
  • 1
    Спасибо, это была проблема! – reedts 19 September 2013 в 13:21
  • 2
    @reedts, можете ли вы сказать мне, в чем проблема с моим кодом? – Piyush 19 September 2013 в 13:35
  • 3
    У меня та же проблема, что и @reedts, но это не имело никакого отношения к тому, что я вернулся (я возвращал уже завышенное представление). Но в остальном то же самое - событие click никогда не запускается, кажется. – Ted 20 July 2015 в 17:07

изменить

 return inflater.inflate(R.layout.input_fgmt, container, false);

на

 return InputFragmentView ;

Также измените с помощью этого:

translate_button.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View view)
    {
        Log.d("Test", "onClickListener ist gestartet");
        Toast.makeText(getActivity().getApplicationContext(), "Test", Toast.LENGTH_LONG).show();
        saveInString();

    }
});

и импортируйте в качестве импорта android.view.View ;

3
ответ дан Piyush 20 August 2018 в 07:05
поделиться
  • 1
    Ваше второе утверждение бесполезно, он уже импортирует View.OnClickListener; – Carnal 19 September 2013 в 13:16

Лучший способ получить все созданные взгляды, вы должны переопределить метод:

@Override
public void onActivityCreated(Bundle saved) {
    super.onActivityCreated(saved);
     input_text = (EditText) InputFragmentView.findViewById(R.id.input_field);

translate_button = (Button) InputFragmentView.findViewById(R.id.translate);


translate_button.setOnClickListener(new OnClickListener()
{
    @Override
    public void onClick(View view)
    {
        Log.d("Test", "onClickListener ist gestartet");
        Toast.makeText(getActivity().getApplicationContext(), "Test",        Toast.LENGTH_LONG).show();
        saveInString();

    }
});

, потому что этот метод называется после всех представлений. вы должны прочитать жизненный цикл фрагмента.

2
ответ дан Sayros 20 August 2018 в 07:05
поделиться

Измените ваш код

  1. на определение класса:
     public class InputFragment extends Fragment implements View.OnClickListener
    
  2. при вызове setOnClickListener:
        translate_button.setOnClickListener(new View.OnClickListener()
        {
              @Override
              public void onClick(View InputFragmentView)
              {
                      Log.d("Test", "onClickListener ist gestartet");
                      Toast.makeText(getActivity().getApplicationContext(), "Test", Toast.LENGTH_LONG).show();                                    
                      saveInString();
              }
         });
    
2
ответ дан user 20 August 2018 в 07:05
поделиться
  • 1
    Вам не нужно внедрять OnClickListener в класс, если вы устанавливаете его вручную на кнопке напрямую. – Carnal 19 September 2013 в 13:14
Другие вопросы по тегам:

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