2015-07-17 2 views
-1

Я хочу отобразить Array в TextView для всплывающего окна. Только 1 элемент из массива случайным образом. В этом случае я использую ArrayList в своем MainActivity и вызывая randomArray() для отображения. Он не работает на Screen_popup.xml. Но он работает в Main_activity.xml. Я использую TextView textView1 для main_activity & TextView txtViewArrayContent для всплывающего окна. Я думаю, что TextView инициализирован правильно, но имеет какое-то отношение к setContentView? Любые указатели были бы замечательными, спасибо!SetText NullPointerException для ArrayList в PopupWindow. Android

Ошибка в журнале кошки:

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 

Основная деятельность 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(); 
    } 
}; 
} 

Отрывок из экрана XML popupWindow

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

Он не существует/не раздувается до того нажатия кнопки – Selvin

ответ

0

Вы пытаетесь инициализировать newArray, пытаясь найти его по id в файле activity_main.xml, но его там нет, так что вы получите NullPointerException. Чтобы исправить код, удалить newArray инициализации и вызов randomArray() из onCreate() метода и добавить его в customPopupWindwo(View v) следующим образом:

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

Это сделал это! Огромное спасибо Аркадию. – JackZ

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

  • Нет связанных вопросов^_^