Как изменить размер шрифта в зависимости от нажатой кнопки Spinner - PullRequest
0 голосов
/ 06 октября 2018

Прежде чем объяснить вам, я сказал вам, что я искал все вопросы в stackoverflow и во многих веб-сайтах, поэтому не помечайте его как дубликат или какие-либо негативные действия.Я застрял здесь более 4 дней.

Я хочу изменить размер шрифта в зависимости от нажатой кнопки.Каждый раз, когда я щелкаю спиннер выпадающего списка, он приводил меня к java.lang.NullPointerException.Вот, пожалуйста,

MyAndroidAppActivity

public class MyAndroidAppActivity extends AppCompatActivity {

private Spinner spinner1, spinnerLatin;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // toolbar
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    //this line shows back button
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    //Display data
    Spinner spinnerBackgroundChange = (Spinner)findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> spinnerArrayAdapter = ArrayAdapter.createFromResource(this, R.array.country_arrays, android.R.layout.simple_spinner_item);
    spinnerArrayAdapter.setDropDownViewResource(R.layout.textview_with_background);
    spinnerBackgroundChange.setAdapter(spinnerArrayAdapter);

    addListenerOnSpinnerItemSelection();
    addListenerOnSpinner2ItemSelection();
}

public void addListenerOnSpinnerItemSelection() {
    spinner1 = (Spinner) findViewById(R.id.spinner1);
    spinner1.setOnItemSelectedListener(new SelectedListener());
}

public void addListenerOnSpinner2ItemSelection() {
    spinnerLatin = (Spinner) findViewById(R.id.spinnerLatin);
    spinnerLatin.setOnItemSelectedListener(new SelectedLatin());
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            this.finish();
            return true;
    }

    return super.onOptionsItemSelected(item);
} }

Выбранный прослушиватель

public class SelectedListener implements OnItemSelectedListener {

public void onItemSelected (AdapterView <?> parent, View view, int pos, long id){

    ((TextView) view).setTextColor(Color.RED);
    switch (pos) {
        case 0:
            TextView dgs = (TextView) view.findViewById(R.id.sizedoa);
            dgs.setTextSize(30);
            break;
        case 1:
            TextView dgf = (TextView) view.findViewById(R.id.fontLatin);
            dgf.setTextSize(30);
            break;
        default:
            //Default image
            //image.setImageResource(R.drawable.item2);
            break;

    }

}

@Override
public void onNothingSelected (AdapterView <?> arg0){
    // TODO Auto-generated method stub
} }

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/reldoa"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="3dp"
    android:background="@android:color/white"
    android:orientation="vertical">

            <TextView
                android:id="@+id/sizedoa"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:paddingBottom="10dp"
                android:paddingLeft="15dp"
                android:paddingTop="5dp"
                android:text="Ukuran Font"
                android:textColor="#222222"
                android:textSize="18sp" />

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" />

</RelativeLayout>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/reldoa"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="3dp"
    android:background="@android:color/white"
    android:orientation="vertical">

    <TextView
        android:id="@+id/sizelatin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:paddingBottom="10dp"
        android:paddingLeft="15dp"
        android:paddingTop="5dp"
        android:text="Jenis Font"
        android:textColor="#222222"
        android:textSize="18sp" />

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:entries="@array/type_arrays"
        android:prompt="@string/type_font"/>

</RelativeLayout>

        <!-- Font latin -->

        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/relLatin"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="35dp"
            android:background="@android:color/white"
            android:orientation="vertical">

            <TextView
                android:id="@+id/fontLatin"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:paddingBottom="15dp"
                android:paddingLeft="15dp"
                android:paddingTop="15dp"
                android:text="Font Latin"
                android:textColor="#226169"
                android:textSize="20sp" />

        </RelativeLayout>

Но проблема заключается в следующем: Ошибка находится здесь

И это результат ошибки:

10-05 00:20:08.848 5035-5035/? E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
    at id.or.tauhid.doadandzikir.SelectedListener.onItemSelected(SelectedListener.java:32)
    at android.widget.AdapterView.fireOnSelected(AdapterView.java:892)
    at android.widget.AdapterView.access$200(AdapterView.java:49)
    at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:860)
    at android.os.Handler.handleCallback(Handler.java:730)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5103)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)

МожетВы помогаете мне решить проблему, пожалуйста?Я застрял здесь 4 дня.

1 Ответ

0 голосов
/ 06 октября 2018

В вашем слушателе эти строки почти наверняка неверны:

TextView dgs = (TextView) view.findViewById(R.id.sizedoa);
TextView dgf = (TextView) view.findViewById(R.id.fontLatin);

Аргумент view, передаваемый этому методу, является представлением внутри спиннера, на который нажали, что означает, что вызов view.findViewById() будет смотреть только внутрь (часть) самого спиннера.Предположительно, эти представления находятся в макете вашего фрагмента или действия, а не внутри счетчика.

Как вы это исправите, будет зависеть от того, как именно ваше приложение соединено вместе, но одна потенциальная возможность состоит в том, чтобы разыграть AdapterView 's контекст для Activity и затем найдите представления внутри этого:

Activity activity = (Activity) parent.getContext();
TextView dgs = activity.findViewById(R.id.sizedoa);
...