2015-07-22 2 views
0

Я создал простое приложение в android. У меня есть профиль пользователя в навигационном ящике. при выборе опции адреса в этом ящике Откройте этот фрагмент (Пример: фрагмент адреса). В этом макете я ставлю кнопку сохранения. При нажатии этой кнопки сохранения я хочу проверить все поля. Но, когда я выбираю эту опцию из ящика, приложение, к сожалению, остановилось.Метод кнопки Onclick во фрагменте

Мой код здесь:

AddressFragment.java

import android.support.v4.app.Fragment; 
 
import android.os.Bundle; 
 
import android.support.v4.app.FragmentActivity; 
 
import android.view.LayoutInflater; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 
import android.widget.ArrayAdapter; 
 
import android.widget.AutoCompleteTextView; 
 
import android.widget.Button; 
 
import android.widget.EditText; 
 
import android.widget.Toast; 
 

 

 
public class AddressFragment extends Fragment { 
 
    EditText line2; 
 
    Button addrsave; 
 
\t @Override 
 
\t public View onCreateView(LayoutInflater inflater, ViewGroup container, 
 
\t \t \t \t \t \t \t Bundle savedInstanceState) { 
 

 
\t \t View view = inflater.inflate(R.layout.fragment_layout_address, container, false); 
 

 
     addrsave = (Button) getActivity().findViewById(R.id.addrsave); 
 

 
     // Get a reference to the AutoCompleteTextView in the layout 
 
\t \t AutoCompleteTextView textView = (AutoCompleteTextView) view.findViewById(R.id.city_autoCompleteTextView); 
 
\t \t // Get the string array 
 
\t \t String[] city = getResources().getStringArray(R.array.city); 
 
\t \t // Create the adapter and set it to the AutoCompleteTextView 
 
\t \t ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, city); 
 

 
\t \t textView.setAdapter(adapter); 
 
     addrsave.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       String addr = line2.getText().toString(); 
 
       if (addr.equals("")) { 
 
        Toast.makeText(getActivity().getApplicationContext(), "Field cannot be left blank.", Toast.LENGTH_SHORT).show(); 
 
       } 
 
      } 
 
     }); 
 

 
\t return view; 
 

 
    } 
 

 

 
}

Мой LogCat:

07-22 12:47:46.235 6355-6355/com.h2o E/AndroidRuntime﹕ FATAL EXCEPTION: main 
 
    Process: com.h2o, PID: 6355 
 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.h2o/com.h2o.AccountActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
 
      at android.app.ActivityThread.access$800(ActivityThread.java:144) 
 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
 
      at android.os.Looper.loop(Looper.java:135) 
 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
 
      at java.lang.reflect.Method.invoke(Native Method) 
 
      at java.lang.reflect.Method.invoke(Method.java:372) 
 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
 
      at com.h2o.AddressFragment.onCreateView(AddressFragment.java:38) 
 
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789) 
 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955) 
 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138) 
 
      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740) 
 
      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501) 
 
      at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551) 
 
      at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220) 
 
      at android.app.Activity.performStart(Activity.java:5953) 
 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261) 
 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
 
            at android.app.ActivityThread.access$800(ActivityThread.java:144) 
 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
 
            at android.os.Looper.loop(Looper.java:135) 
 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
 
            at java.lang.reflect.Method.invoke(Native Method) 
 
            at java.lang.reflect.Method.invoke(Method.java:372) 
 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

Пожалуйста, помогите!

Заранее благодарен!

+0

ваша кнопка добавляется в фрагмент XML – Destro

+0

Также инициализируйте 'line2', который выдает исключение из NPE после того, как вы решите первую проблему –

ответ

4

Изменения эта линия

addrsave = (Button) getActivity().findViewById(R.id.addrsave); 

в

addrsave = (Button) view.findViewById(R.id.addrsave); 

Вашего R.layout.fragment_layout_address назначается view, так что вы должны использовать view переменные, чтобы получить кнопку от макета. Во-вторых, также инициализировать line2 который бросит исключение NPE (Null Pointer), как только вы разрешить Первый выпуск

4

Изменить это:

addrsave = (Button) getActivity().findViewById(R.id.addrsave); 

к этому:

addrsave = (Button) view.findViewById(R.id.addrsave); 

Проблема заключается в том, что вы делают findViewById() на getActivity(), который дает вам null. И затем установка onClickListener на него вызовет исключение NullPointerException.

Надеюсь, это поможет! :)

2

Я не могу видеть, где вы инициализировали line2? Так line2 является недействительным, который может вызвать за исключением

String addr = line2.getText().toString(); 
0

Я думаю, что вы добавили кнопку в фрагменте, и вы пытаетесь retrive его от деятельности. Таким образом изменить извлечение вид из getActivity(), чтобы посмотреть, как показано ниже

addrsave = (Button) getActivity().findViewById(R.id.addrsave); 

Заменить выше с помощью следующей строки

addrsave = (Button) view.findViewById(R.id.addrsave); 

И Вы пропустили инициализацию вид line2 в строке номер 38

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