raginggoat
raginggoat

Reputation: 3600

Crash When Setting TextView to Visible

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

Answers (2)

raginggoat
raginggoat

Reputation: 3600

the problem was because I was using getActivity.findViewById() instead of rootView.findViewById()

Upvotes: 1

Allan Spreys
Allan Spreys

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:

  1. 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);
    }
    
  2. 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

Related Questions