2015-03-16 5 views
0

Итак, у меня есть этот счетчик, где я хочу найти то, что выбрал выбранный элемент. У меня есть что-то на месте, чтобы вспомнить, какой элемент выбран. Теперь есть кнопка, чтобы щелкнуть в том же макете, где находится счетчик, это вызовет диалоговое окно, в котором указывается, какой элемент вы выбрали. Но я получаю ошибку, на мой журнал кота он говорит: «java.lang.NullPointerException»Выберите значение Spinner item

Это мой XML-файл для диалогового окна;

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="#ffc0c0c0"> 

<TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Saving&apos;s Account" 
      android:id="@+id/spinnerSelectedText" 
      android:textColor="#ff000000" 
      android:drawableLeft="@drawable/transferaccount_icon" 
      android:drawablePadding="10dp" 
      android:paddingLeft="10dp" 
      android:layout_marginTop="10dp" 
      android:textSize="16sp" /> 


</RelativeLayout> 

Это мой файл java, который предназначен для диалога;

public class examplefile extends DialogFragment { 

public Dialog onCreateDialog(Bundle savedInstanceState) { 

    final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater inf = getActivity().getLayoutInflater(); 
    View theDIalog = inf.inflate(R.layout.makea_transfer_confirm, null); 
    builder.setView(theDIalog); 

    builder.setCancelable(true); 

return dialog; 

} 

} 

Теперь это экран, который вы получаете, когда вы начинаете - хорошо после основного класса активности, но я не хочу, чтобы разделить код от основной деятельности, так как я считаю, что это не нужно;

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    final View v = inflater.inflate(R.layout.makea_transfer, container, false); 


    spinner = (Spinner)v.findViewById(R.id.spinnermakeatransfer); 
    ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.accounts,R.layout.spinner_item); 
    adapter.setDropDownViewResource(R.layout.spinner_dropdown_items); 
    spinner.setAdapter(adapter); 
    spinner.setPrompt("Select an item"); 



Spinner spinner1 = (Spinner)v.findViewById(R.id.spinnermakeatransfer); 
    String spinnerSelectedItem = spinner1.getSelectedItem().toString(); 


    TextView spinnerText = (TextView) v.findViewById(R.id.spinnerSelectedText); 
    spinnerText.setText(spinnerSelectedItem); 

return v; 

} 

Теперь это код makea_transfer;

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent"> 

<Spinner 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/spinnermakeatransfer" 
      android:layout_marginLeft="5dp" 
      android:layout_marginRight="5dp" 
      android:paddingTop="5dp" 
      android:spinnerMode="dialog" 
      android:layout_marginTop="5dp" 
      android:touchscreenBlocksFocus="false" /> 

</RelativeLayout> 

Пожалуйста, помогите мне исправить эту проблему, пожалуйста, прокомментируйте, если вы не понимаете и не нуждаетесь в более подробной информации от меня.

Это Log Cat Click Here

ответ

2

Здесь:

TextView spinnerText = (TextView) v.findViewById(R.id.spinnerSelectedText); 

spinnerSelectedText внутри makea_transfer_confirm макета, но при попытке получить от makea_transfer:

Получить TextView в onCreateDialog методе examplefile DialogFragment:

View theDIalog = inf.inflate(R.layout.makea_transfer_confirm, null); 
builder.setView(theDIalog); 
// get TextView here 
TextView spinnerText = (TextView) theDIalog.findViewById(R.id.spinnerSelectedText); 

И для показа spinnerSelectedItem значения в spinnerText проходе это, используя setArguments examplefile класса:

v.findViewById(R.id.maketransferReviewButton).setOnClickListener(
               new View.OnClickListener() { 
@Override public void onClick(View v) { 
    SampleDialog fragment = new examplefile(); 
    Bundle args = new Bundle(); 
    args.putString("spinnerText", spinner1.getSelectedItem().toString()); 
    fragment.setArguments(args); 
    examplefile.show(getFragmentManager(), "make a transfer dialog"); 
} 

}); 

и внутри onCreateDialog get String с использованием getArgum как:

String strSelectedValueFromSpinner = getArguments().getString("spinnerText"); 
View theDIalog = inf.inflate(R.layout.makea_transfer_confirm, null); 
builder.setView(theDIalog); 
// get TextView here 
TextView spinnerText = (TextView) theDIalog.findViewById(R.id.spinnerSelectedText); 
spinnerText.setText(strSelectedValueFromSpinner); 
+0

Да, вы правы, поэтому внутри java-файла examplefile я могу изменить этот текст и заменить его значением spinner? –

+0

@ user3511639: см. Мой ответ на редактирование. дайте мне знать, если все еще какая-либо проблема. –

+0

. Вы меня не упустили, пока я отправляю этот комментарий, поэтому я быстро прочитаю, что вы набрали. –

1

Вам нужно сделать, как этот

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

       String spinnerSelectedItem = spinner.getSelectedItem().toString(); 
       Log.i("Selected item : ", items); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 

      } 

     }); 

и Удалить

Spinner spinner1 = (Spinner)v.findViewById(R.id.spinnermakeatransfer); 
+0

Да, это печатает, какой элемент я выбрал на консоли. Но я хочу, чтобы этот текст печатался внутри этого диалогового окна. У меня есть –

+0

@ user3511639 Вам нужно только передать текстовый элемент spinner в конструктор диалогового окна Alert Dialog и использовать setText для установки текста. –

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