12

Ho bisogno di ottenere l'EditText che è definito in un layout XML che viene caricato in modo dinamico come vista in una finestra di preferenza cioè:Come ottenere elementi (findViewById) per un layout che viene caricato dinamicamente (setView) in una finestra di dialogo?

public class ReportBugPreference extends EditTextPreference { 

    @Override 
    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { 
     super.onPrepareDialogBuilder(builder); 
     builder.setView(LayoutInflater.from(ctx).inflate(R.layout.preference_report_bug_layout,null)); 
     EditText edttxtBugDesc = (EditText) findViewById(R.id.bug_description_edittext); // NOT WORKING 
    } 

} 

EDIT: SOLUZIONE da jjnFord

@Override 
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { 
    super.onPrepareDialogBuilder(builder); 

    View viewBugReport = LayoutInflater.from(ctx).inflate(R.layout.preference_report_bug,null); 
    EditText edttxtBugDesc = (EditText) viewBugReport.findViewById(R.id.bug_description_edittext); 

    builder.setView(viewBugReport); 



} 

risposta

15

Dal momento che stanno estendendo EditTextPreference puoi semplicemente usare il metodo getEditText() per afferrare la vista di testo predefinita. Tuttavia, dal momento che stai impostando il tuo layout questo probabilmente non farà quello che stai cercando.

Nel tuo caso dovresti gonfiare il layout XML in un oggetto View, quindi trovare editText nella vista - quindi puoi passare la vista al builder. Non ho provato questo, ma solo guardando il tuo codice penso che sia possibile.

Qualcosa di simile a questo:

View view = (View) LayoutInflater.from(ctx).inflate(R.layout.preference_report_bug_layout, null); 
EditText editText = view.findViewById(R.id.bug_description_edittext); 
builder.setView(view); 
+0

Grazie! Soluzione secondo il tuo suggerimento! –

8

LayoutInflater è necessario per creare (o riempimento) Vista sulla base di file XML in runtime. Ad esempio, se è necessario generare viste dinamicamente per gli oggetti ListView. What is the layout inflater in an Android application?

  1. Crea il tuo LayoutInflater:

LayoutInflater inflater = getActivity().getLayoutInflater();

  1. Creare la vista dal gonfiatore riferisce a your_xml_file:

View view= inflater.inflate(R.layout.your_xml_file, null);

  1. Trova il tuo oggetto nel tuo layout per id.

TextView textView = (TextView)view.findViewById(R.id.text_view_id_in_your_xml_file);

  1. Usa il tuo oggetto: vale a dire

textView.setText("Hello!");