如何将 TextView 的文本设置为微调器上所选项目的内容?

How to set the text of a TextView to the content of a selected item on a spinner?

我正在尝试将所选项目的值放入 TextView 中,并且我希望它在每次所选项目更改时更改! 我试图将所选项目的位置放入一个字符串中,然后将 TextView 的文本设置为等于这个相同的字符串,但没有成功!我对 java 编码真的很陌生,非常欢迎所有回答!

主要Activity:

package com.barcala.android.smiteultimatecountdown;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import org.w3c.dom.Text;

import static android.icu.lang.UCharacter.GraphemeClusterBreak.T;
import static com.barcala.android.smiteultimatecountdown.R.array.godsNames;
import static com.barcala.android.smiteultimatecountdown.R.id.god_List;
import static com.barcala.android.smiteultimatecountdown.R.id.selected_God;
import static com.barcala.android.smiteultimatecountdown.R.string.selected_god;


public class ultimate extends AppCompatActivity {
        Spinner gl;
        String god1;
        TextView selectedGod;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ultimate);
        selectedGod = (TextView) findViewById(R.id.selected_God);
        selectedGod.setText(selected_god);
        addListenerOnSpinnerItemSelection();

    }


    public void addListenerOnSpinnerItemSelection() {
        gl = (Spinner) findViewById(R.id.god_List);
        gl.setOnItemSelectedListener(new MyOnItemSelectedListener());


    }

    public void get_name(View view) {
        Spinner god_List = (Spinner) findViewById(R.id.god_List);
        god1 = god_List.getSelectedItem().toString();
        TextView selectedGod = (TextView) findViewById(R.id.selected_God);
        selectedGod.setText(god1);
    }
}

MyOnItemSelectedListener() :

package com.barcala.android.smiteultimatecountdown;

import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.TextView;

import org.w3c.dom.Text;

import static android.R.attr.y;
import static com.barcala.android.smiteultimatecountdown.R.id.god_List;
import static com.barcala.android.smiteultimatecountdown.R.id.selected_God;
import static com.barcala.android.smiteultimatecountdown.R.string.selected_god;


public class MyOnItemSelectedListener extends ultimate implements AdapterView.OnItemSelectedListener {


        @Override
        public void onItemSelected(AdapterView parent, View view, int pos, long id) {

            String result = parent.getItemAtPosition(pos).toString();

            selectedGod.setText(result);
            Toast.makeText(parent.getContext(), "Selected God : " + result , Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView parent) {

        }
    }

logcat:

03-05 15:12:09.966 19007-19007/com.barcala.android.smiteultimatecountdown E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                            Process: com.barcala.android.smiteultimatecountdown, PID: 19007
                                                                                            java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
                                                                                                at com.barcala.android.smiteultimatecountdown.MyOnItemSelectedListener.onItemSelected(MyOnItemSelectedListener.java:26)
                                                                                                at android.widget.AdapterView.fireOnSelected(AdapterView.java:1124)
                                                                                                at android.widget.AdapterView.access0(AdapterView.java:54)
                                                                                                at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:1089)
                                                                                                at android.os.Handler.handleCallback(Handler.java:739)
                                                                                                at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                                at android.os.Looper.loop(Looper.java:145)
                                                                                                at android.app.ActivityThread.main(ActivityThread.java:5951)
                                                                                                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:1400)
                                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

在 Toast 行上方,放置此行:

g1.setText(mAdapter.getItem(adapterView.getSelectedItemPosition()));

但要使其正常工作,您需要使您的适配器可访问。因此,将适配器设置在 "TextView g1" 旁边,并将它们放在 Activity 的顶部,而不是在侦听器内部:

TextView g1;
ArrayAdapter<CharSequence> mAdapter;

编辑 回复评论:

将 g1 和 mAdapter 放在 Activity 的顶部:

public class MainActivity {

    TextView mG1;
    ArrayAdapter<CharSequence> mAdapter;
    ...
}

string.xml

<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>

布局

<Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />

Activity class

String[] myarray;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    myarray = getResources().getStringArray(R.array.array_name);
}

你的class

public class MyOnItemSelectedListener  implements AdapterView.OnItemSelectedListener {

    TextView g1;


        @Override
        public void onItemSelected(AdapterView parent, View view, int pos, long id) {



                 String result = myarray[pos]; 
                Toast.makeText(parent.getContext(), "Selected Country : " + result , Toast.LENGTH_SHORT).show();
                g1.setText(result);

        }

        @Override
        public void onNothingSelected(AdapterView parent) {

        }
    }