文本视图返回null

时间:2016-07-03 11:55:15

标签: java android

我有2个类BuyCoins和CustomOnItemSelectListerner。 BuyCoins类包含一个微调器,一旦选择了微调器,就会调用CustomOnItemSelectListerner类。

public class BuyCoins extends AppCompatActivity {
...
    public void addListenerOnSpinnerItemSelection() {
    spinner1 = (Spinner) findViewById(R.id.spinner1);
    //TextView t=(TextView) findViewById(R.id.conversion);
    spinner1.setOnItemSelectedListener(new CustomOnItemSelectedListener(t));
    }
...
}

public class CustomOnItemSelectedListener implements OnItemSelectedListener {
    //private TextView t;

    //CustomerOnItemSelected (TextView V) {t=V;}   

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

        String selected= parent.getItemAtPosition(pos).toString();
        TextView t=(TextView)parent.findViewById(R.id.conversion);

        switch(selected) {
            case "A":
                Toast.makeText(parent.getContext(),
                "OnItemSelectedListener : " + selected,
                Toast.LENGTH_SHORT).show();
                t.setText("$ala$");
                break;
        }
   ...
}

我的问题是t.setText返回null,但是case语句的其余部分工作正常。请帮忙。

带有微调器的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="50dp"
android:paddingTop="50dp"
android:paddingRight="50dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Purchase Coins"
        android:id="@+id/textView"
        android:layout_gravity="center_horizontal" />


    <ImageView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:id="@+id/coinpic"
        android:src="@drawable/coin"
        android:scaleX="0.8"
        android:scaleY="0.8"
        android:layout_gravity="center_horizontal" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/coin_array"
        android:prompt="@string/coin_prompt" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text=""
        android:id="@+id/conversion"
        android:layout_gravity="right" />

    </LinearLayout>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Purchase Coins"
        android:id="@+id/Pur_button"
        android:layout_gravity="center_horizontal"
        android:onClick="toast"/>

</LinearLayout>

1 个答案:

答案 0 :(得分:1)

您尝试加入的TextView属于您的整体布局,而不是微调器,因此您需要使用以下命令从您的活动中访问它:

TextView t=(TextView) findViewById(R.id.conversion);

您可以通过在CustomOnItemSelectListener中创建一个新的构造函数将它传递给您的侦听器,该构造函数接受一个TextView,您可以将其设置为成员变量,然后在下面调用setText。

然后在Acticity中创建监听器时,调用新的构造函数来传递TextView:

    new CustomOnItemSelectListener(t);