2015-07-17 1 views
-1

Je souhaite afficher un tableau dans une fenêtre TextView pour une fenêtre contextuelle. Seulement 1 article de la rangée au hasard. Dans ce cas, j'utilise une ArrayList dans mon MainActivity et j'appelle le randomArray() pour l'afficher. Cela ne fonctionne pas sur le fichier Screen_popup.xml. Mais cela fonctionne dans Main_activity.xml. J'utilise TextView textView1 pour l'activité principale & TextView txtViewArrayContent pour la fenêtre contextuelle. Je pense que le TextView est initialisé correctement mais a quelque chose à voir avec setContentView? Tout pointeur serait génial, merci!SetText NullPointerException pour ArrayList dans PopupWindow. Android

L'erreur dans le chat journal est:

07-17 09:25:34.655 25779-25779/com.example.testarray_02 E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.example.testarray_02, PID: 25779 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testarray_02/com.example.testarray_02.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 

Activité principale Java:

public class MainActivity extends Activity { 

Button btnClosePopup; 
Button btnCreatePopup; 
TextView newArray; 
String item; 

//***** Random Generator & ArrayList ***** 
final Random randomGenerator = new Random(); 
final ArrayList sample = new ArrayList() {{ add("Random Facts about Stuff"); add("Random Facts about Stuff 2"); add("Random Facts about Stuff 3"); add("Random Facts about Stuff 4");}}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    //Works - main activity layout 
    // newArray = (TextView)findViewById(R.id.textView1); 

    // Does NOT work. ... popup layout 
    newArray = (TextView)findViewById(R.id.txtViewArrayContent); 

    randomArray(); 
    btnCreatePopup = (Button) findViewById(R.id.button1); 
    btnCreatePopup.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      customPopupWindow(v); 
     } 
    }); 
} 

private void randomArray() { 
    //setContentView(R.layout.screen_popup); 
    item = (String) sample.get(randomGenerator.nextInt(sample.size())); 
    newArray.setText(item); // Error logcat points to this line 
          // Null Exception Error 
} 
private PopupWindow popupWin; 
private void customPopupWindow(View v){ 
    try { 
     LayoutInflater inflater = (LayoutInflater) MainActivity.this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View layout = inflater.inflate(R.layout.screen_popup, 
       (ViewGroup) findViewById(R.id.popup_element)); 
     popupWin = new PopupWindow(layout, 600, 600, true); 
     popupWin.showAtLocation(layout, Gravity.CENTER, 0, 0); 
     btnClosePopup = (Button) layout.findViewById(R.id.btn_close_popup); 
     btnClosePopup.setOnClickListener(cancel_button_click_listener); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
private View.OnClickListener cancel_button_click_listener = new View.OnClickListener() { 
    public void onClick(View v) { 
     popupWin.dismiss(); 
    } 
}; 
} 

Snippet écran XML popupWindow

<TextView 
    android:id="@+id/txtViewArrayContent" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="5sp" 
    android:text="" /> 
+0

Il n'existe pas/n'est pas gonflé avant le bouton cliquez – Selvin

Répondre

0

Vous essayez d'initialiser newArray en essayant de trouver par ID dans activity_main.xml fichier, mais il n'est pas là, donc vous obtenez NullPointerException. Pour corriger votre code, supprimez l'initialisation newArray et l'appel de randomArray() de onCreate() méthode et l'ajouter dans customPopupWindwo(View v) comme suit:

private void customPopupWindow(View v) { 
    LayoutInflater inflater = (LayoutInflater) MainActivity.this 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.screen_popup, 
      (ViewGroup) findViewById(R.id.popup_element)); 
    newArray = (TextView) layout.findViewById(R.id.txtViewArrayContent); 
    //omitted rest for brevity 
} 
+0

qui l'a fait! Merci beaucoup Arkadiy. – JackZ