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

Я написал этот класс, чтобы преодолеть проблему, которую я имел с выбором опции в списке выбора html. Я надеюсь, что это кому-то поможет.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace Login_page.Models
{
    public class HTMLSelect
    {
        public string id { get; set; }
        public IEnumerable<string> @class { get; set; }
        public string name { get; set; }
        public Boolean required { get; set; }
        public string size { get; set; }
        public IEnumerable<SelectOption> SelectOptions { get; set; }

        public HTMLSelect(IEnumerable<SelectOption> options)
        {

        }

        public HTMLSelect(string id, string name)
        {
            this.id = id;
            this.name = name;
        }

        public HTMLSelect(string id, string name, bool required, IEnumerable<SelectOption> options)
        {
            this.id = id;
            this.name = name;
            this.required = required;
        }

        private string BuildOpeningTag()
        {
            StringBuilder text = new StringBuilder();
            text.Append("<select");
            text.Append(this.id != null ? " id=" + '"' + this.id + '"' : "");
            text.Append(this.name != null ? " name=" + '"' + this.name + '"' : "");
            text.Append(">");
            return text.ToString();

        }

        public string GenerateSelect(IEnumerable<SelectOption> options)
        {
            StringBuilder selectElement = new StringBuilder();
            selectElement.Append(this.BuildOpeningTag());
            foreach (SelectOption option in options)
            {
                StringBuilder text = new StringBuilder();
                text.Append("\t");
                text.Append("<option value=" + '"' + option.Value + '"');
                text.Append(option.Selected != false ? " selected=" + '"' + "selected" + '"' + ">" : ">");
                text.Append(option.Text);
                text.Append("</option>");
                selectElement.Append(text.ToString());
            }
            selectElement.Append("</select");
            return selectElement.ToString();
        }
    }

    public class SelectOption
    {
        public string Text { get; set; }
        public Boolean Selected { get; set; }
        public string Value { get; set; }
    }
}

И

public IEnumerable<SelectOption> getOrderTypes()
{
    List<SelectOption> orderTypes = new List<SelectOption>();
                        if (this.orderType == "OptionText")
                        {
                            orderTypes.Add(new SelectOption() { Value = "1", Text = "OptionText", Selected = true });
                        } else
                        {
                            orderTypes.Add(new SelectOption() { Value = "2", Text = "OptionText2" });
                        }
}

И использовать его:

@{
    Login_page.Models.HTMLSelect selectElement = new Login_page.Models.HTMLSelect("order-types", "order-types");

}
@Html.Raw(selectElement.GenerateSelect(Model.getOrderTypes()));
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 19 August 2018 в 17:03
поделиться
  • 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 19 August 2018 в 17:03
поделиться
  • 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 19 August 2018 в 17:03
поделиться

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

  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 19 August 2018 в 17:03
поделиться
  • 1
    Вам не нужно внедрять OnClickListener в класс, если вы устанавливаете его вручную на кнопке напрямую. – Carnal 19 September 2013 в 13:14
Другие вопросы по тегам:

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