0

Получение ошибки: Указанный ребенок уже имеет родителя. Сначала вы должны вызвать removeView() родителя ребенка.Как удалить и установить вид диалогового окна в классе адаптера?

Вопрос: Поскольку я вызываю конструктор предупреждений несколько раз, поэтому сначала мне нужно удалить представление, после чего необходимо снова установить представление.

Проблема: Я не знаю, как удалить и установить вид в адаптере.

public class ActionAdaptor extends SectionRecyclerViewAdapter<SectionHeader, Action, SectionViewHolder, ActionChildGoal> { 


    Context context; 
    DbHelper dbHelper; 
    HealthVitalsFunction interfaceAdapter; 

    public ActionAdaptor(Context context, List<SectionHeader> sectionItemList) { 
     super(context, sectionItemList); 
     this.context = context; 
     dbHelper = new DbHelper(context); 
    } 


    @Override 
    public SectionViewHolder onCreateSectionViewHolder(ViewGroup sectionViewGroup, int viewType) { 
     View view = LayoutInflater.from(context).inflate(R.layout.section, sectionViewGroup, false); 
     return new SectionViewHolder(view); 
    } 

    @Override 
    public ActionChildGoal onCreateChildViewHolder(ViewGroup childViewGroup, int viewType) { 
     View view = LayoutInflater.from(context).inflate(R.layout.action_list, childViewGroup, false); 
     return new ActionChildGoal(view); 
    } 

    @Override 
    public void onBindSectionViewHolder(SectionViewHolder sectionViewHolder, int sectionPosition, SectionHeader section) { 
     sectionViewHolder.name.setText(section.getSectionText()); 
    } 

    @Override 
    public void onBindChildViewHolder(final ActionChildGoal holder, int sectionPosition, final int childPosition, final Action action) { 



     //for more options 

     //When nothing is there.. 
     if (action.getBenefits().length()==0 && action.getSideEffects().length() == 0 && action.getRemarks().length()==0){ 
      holder.moreOptions.setVisibility(View.GONE); 
      holder.actionSubSection.setVisibility(View.GONE); 
     }else { 

      String msg=" "; 

      if (action.getSideEffects().length()!=0) 
       msg=msg.concat("<br /> <strong>Side Effects</strong> <br /> "+action.getSideEffects()); 

      holder.actionSubSection.setText(Html.fromHtml(msg)); 

      holder.actionSubSection.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        showDialogBox("More Information ",holder.actionSubSection); 
       } 
      }); 

     } 


    public void showDialogBox(String title, View text) 
    { 


     final AlertDialog.Builder alert=new AlertDialog.Builder(new ContextThemeWrapper(context,R.style.AlertBoxTheme)); 
     alert.setView(new TextView(context)); 

     text.setPadding(3,0,3,0); 
     alert.setView(text); 
     alert.setTitle(title); 


     alert.setPositiveButton("READ", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       dialog.cancel(); 
      } 
     }); 

     alert.show(); 
    } 

} 

ответ

1

Вы звоните alert.setView 2 раза. Это проблема.

+0

Ok Если я удалю их оба, то также получаю ту же ошибку. –

+0

Вам нужно установить представление только один раз – Manza

+0

Я установил его только один раз. и добавить сообщение TextView = новый TextView (контекст); alert.setView (сообщение); но теперь я получаю ошибку токена null не для приложения –

0

Эта линия проблема:

 alert.setView(text); 

Вы пытаетесь установить вид для предупреждения диалога с точки зрения, которая в настоящее время добавляется в RecyclerView, вам необходимо создать новый или завышать аналогичные из XML.

+0

так как я могу решить проблему? –

+0

Удалите эту строку и создайте оставьте один с setView (новый TextView (контекст)) и установите текст в этом текстовом виде. – kenzo

+0

Я попытался, но теперь я получаю ошибку Невозможно добавить окно - токен null не для приложения –

Смежные вопросы