2014-12-15 7 views
0

Мое приложение разбивается при настройке TextView на мой фрагмент.Сбой при настройке TextView на Visible

В onCreateView у меня есть, и я получаю NullPointerException на setVisibility()

settingsTitle = (TextView)getActivity().findViewById(R.id.settingsTitle); 
settingsTitle.setVisibility(View.VISIBLE); 

Вот XML.

<?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" 
    android:background="@color/plain_background"> 

    <TextView 
     android:id="@+id/settingsTitle" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:layout_centerHorizontal="true" 
     android:text="Choose Your Default Screen" 
     android:textAlignment="center" 
     android:gravity="center" 
     android:textColor="@color/black_text" 
     android:visibility="gone"/> 

    <ListView 
     android:id="@+id/listFeed" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/settingsTitle" 
     android:fadeScrollbars="true" 
     android:fastScrollEnabled="true" 
     android:fadingEdge="none" 
     android:divider="@color/kfb_blue" 
     android:dividerHeight="1dp" 
     android:background="@color/plain_background"/> 

</RelativeLayout> 

Вот весь код в моем фрагменте по запросу.

package kyfb.android.kyfb.com.kyfb; 

import android.app.Fragment; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 


public class SettingsFragment extends Fragment { 

    private ListView defaultScreen; 
    private static SharedPreferences sharedPref; 
    private static SharedPreferences.Editor editor; 
    private static TextView settingsTitle; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 
     View rootView = inflater.inflate(R.layout.fragment_benefits, null); 

     // this.getActivity().getActionBar().setTitle("Choose Default Screen"); 

     String[] values = new String[] {"Ag News", "Action Alerts", "Market Updates", "KFB Magazine", "Ag Facts", 
       "Member Benefits", "Roadside Farm Markets", "Media", "Annual Meeting", "My KYFB"}; 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_single_choice, android.R.id.text1, values) { 
      @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       View view = super.getView(position, convertView, parent); 
       TextView text = (TextView) view.findViewById(android.R.id.text1); 
       text.setTextColor(getResources().getColor(R.color.kfb_blue)); 
       return view; 
      } 
     }; 

     defaultScreen = (ListView)rootView.findViewById(R.id.listFeed); 
     defaultScreen.setChoiceMode(defaultScreen.CHOICE_MODE_SINGLE); 
     defaultScreen.setAdapter(adapter); 

     settingsTitle = (TextView)getActivity().findViewById(R.id.settingsTitle); 
     settingsTitle.setVisibility(View.VISIBLE); 

     sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
     String savedDefault = sharedPref.getString("DEFAULT", null); 
     if (savedDefault != null) { 
      if (savedDefault.equals("ag news")) { 
       defaultScreen.setItemChecked(0, true); 
      } 
      else if (savedDefault.equals("action alerts")) { 
       defaultScreen.setItemChecked(1, true); 
      } 
      else if (savedDefault.equals("market updates")) { 
       defaultScreen.setItemChecked(2, true); 
      } 
      else if (savedDefault.equals("kfb magazine")) { 
       defaultScreen.setItemChecked(3, true); 
      } 
      else if (savedDefault.equals("ag facts")) { 
       defaultScreen.setItemChecked(4, true); 
      } 
      else if (savedDefault.equals("member benefits")) { 
       defaultScreen.setItemChecked(5, true); 
      } 
      else if (savedDefault.equals("roadside markets")) { 
       defaultScreen.setItemChecked(6, true); 
      } 
      else if (savedDefault.equals("media")) { 
       defaultScreen.setItemChecked(7, true); 
      } 
      else if (savedDefault.equals("annual meeting")) { 
       defaultScreen.setItemChecked(8, true); 
      } 
      else if (savedDefault.equals("my kyfb")) { 
       defaultScreen.setItemChecked(9, true); 
      } 
     } 
     else { 
      defaultScreen.setItemChecked(0, true); 
     } 

     defaultScreen.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       switch(position) { 
        case 0: 
         sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
         editor = sharedPref.edit(); 
         editor.putString("DEFAULT", "ag news"); 
         editor.apply(); 

         defaultScreen.setItemChecked(0, true); 
         break; 
        case 1: 
         sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
         editor = sharedPref.edit(); 
         editor.putString("DEFAULT", "action alerts"); 
         editor.apply(); 

         defaultScreen.setItemChecked(1, true); 
         break; 
        case 2: 
         sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
         editor = sharedPref.edit(); 
         editor.putString("DEFAULT", "market updates"); 
         editor.apply(); 

         defaultScreen.setItemChecked(2, true); 
         break; 
        case 3: 
         sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
         editor = sharedPref.edit(); 
         editor.putString("DEFAULT", "kfb magazine"); 
         editor.apply(); 

         defaultScreen.setItemChecked(3, true); 
         break; 
        case 4: 
         sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
         editor = sharedPref.edit(); 
         editor.putString("DEFAULT", "ag facts"); 
         editor.apply(); 

         defaultScreen.setItemChecked(4, true); 
         break; 
        case 5: 
         sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
         editor = sharedPref.edit(); 
         editor.putString("DEFAULT", "member benefits"); 
         editor.apply(); 

         defaultScreen.setItemChecked(5, true); 
         break; 
        case 6: 
         sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
         editor = sharedPref.edit(); 
         editor.putString("DEFAULT", "roadside markets"); 
         editor.apply(); 

         defaultScreen.setItemChecked(6, true); 
         break; 
        case 7: 
         sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
         editor = sharedPref.edit(); 
         editor.putString("DEFAULT", "media"); 
         editor.apply(); 

         defaultScreen.setItemChecked(7, true); 
         break; 
        case 8: 
         sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
         editor = sharedPref.edit(); 
         editor.putString("DEFAULT", "annual meeting"); 
         editor.apply(); 

         defaultScreen.setItemChecked(8, true); 
         break; 
        case 9: 
         sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
         editor = sharedPref.edit(); 
         editor.putString("DEFAULT", "my kyfb"); 
         editor.apply(); 

         defaultScreen.setItemChecked(9, true); 
         break; 
        default: 
         break; 
       } 
      } 
     }); 

     return rootView; 
    } 
} 
+0

показать код активности – Suvitruf

+0

лучше загрузить ваш LogCat – bjiang

+0

Вы пытаетесь изменить его видимость в фоновом потоке? это может быть причиной аварии. –

ответ

0

Куда вы вызываете этот код? Я предполагаю, что вы используете фрагменты из-за «getActivity()» часть

1 из 2 вещей произошло здесь:

  1. getAtivity() равна нулю, что может произойти, если ваш фрагмент не был прикреплен к деятельности еще. Вы можете исправить это, окружая код, если заявление:

    if(isAdded()){ 
        settingsTitle = (TextView)getActivity().findViewById(R.id.settingsTitle); 
        settingsTitle.setVisibility(View.VISIBLE); 
    } 
    
  2. Ваш макет еще не завышены, поэтому нет никакого вида с «settingsTitle» идентификатор на экране еще. Если вы звоните этот код из onCreateActivity, то вы должны ссылаться на недавно добавленный вместо getActivity(). FindView

Больше код необходим, чтобы дать вам конкретное решение.

1

проблема была, потому что я использовал getActivity.findViewById() вместо rootView.findViewById()

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