Reputation: 3600
My app is crashing when setting a TextView to be visible in my fragment.
In onCreateView I have and I get a NullPointerException on setVisibility()
settingsTitle = (TextView)getActivity().findViewById(R.id.settingsTitle);
settingsTitle.setVisibility(View.VISIBLE);
Here is the 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>
Here is all of the code in my fragment as requested.
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;
}
}
Upvotes: 0
Views: 206
Reputation: 3600
the problem was because I was using getActivity.findViewById()
instead of rootView.findViewById()
Upvotes: 1
Reputation: 5707
Where are you calling this code from? I assume you are using fragments because of the "getActivity()" part
1 of 2 things happened here:
getAtivity() is null, which could happen if your fragment hasn't been attached to the activity yet. You can fix that by surrounding the code in an if statement:
if(isAdded()){
settingsTitle = (TextView)getActivity().findViewById(R.id.settingsTitle);
settingsTitle.setVisibility(View.VISIBLE);
}
Your layout is not inflated yet, so there is no view with "settingsTitle" id on the screen yet. If you are calling this code from onCreateActivity, then you should reference newly added view instead of getActivity().findView
More code is required to give you concrete solution.
Upvotes: 0