首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果TextView必须在onCreate中声明,我将如何编辑onCreate之外的onCreate?

如果TextView必须在onCreate中声明,我将如何编辑onCreate之外的onCreate?
EN

Stack Overflow用户
提问于 2015-08-22 05:38:01
回答 4查看 1.4K关注 0票数 2

我遇到了一个问题,就是试图在TextView的内部调用onTap的美元,使应用程序崩溃。但是,将其移动到onCreate()可以工作,因此我无法从onTap()内部设置文本。我如何制作它,以便我可以将文本视图放在onTap中,或者使它能够访问oncreate之外的文本视图?

代码语言:javascript
复制
package com.de_veloper.idlegame;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity{


    TextView dollars;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dollars = (TextView)findViewById(R.id.dollars);
    }

    //
    //
    //
    //code beginning
    //
    //
    //
    public int do_llars;
    public int upg_click_cost;
    public int upg_click_effect;
    public int upg_click_level;

    String $do_llars = String.valueOf(do_llars);
    String $upg_click_cost = String.valueOf(upg_click_cost);
    String $upg_click_level = String.valueOf(upg_click_level);
    String $upg_click_effect = String.valueOf(upg_click_effect);


    public void onTap(View view){
        if (upg_click_level == 0){
            upg_click_level = 1;
            upg_click_effect = 1;
            upg_click_effect = upg_click_level * upg_click_effect;
        }
        do_llars = do_llars + upg_click_effect;
        dollars.setText($do_llars);

    }

    public void upgradeBuy(){


    }

}

XML代码在这里:

代码语言:javascript
复制
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView android:text="@string/moneybutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16pt"
        android:padding="50px"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:clickable="true"
        android:onClick="onTap"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/totaldo_llars"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:text="Total do_llars: "
        android:textSize="8pt" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/do_llars"
        android:id="@+id/dollars"
        android:layout_alignTop="@+id/totaldo_llars"
        android:layout_toRightOf="@+id/totaldo_llars"
        android:layout_toEndOf="@+id/totaldo_llars"
        android:textSize="8pt"
        android:textIsSelectable="false"
/>

</RelativeLayout>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-22 06:37:22

问题似乎是在变数中。您正在设置字符串变量$do_llars、$upg_click_cost、$upg_click_level、$upg_click_effect,然后再将任何值赋值给do_llars、upg_click_cost、upg_click_effect、upg_click_level。因此,将您的代码修改为

代码语言:javascript
复制
public int do_llars;
public int upg_click_cost;
public int upg_click_effect;
public int upg_click_level;

String $do_llars = ""; //String.valueOf(do_llars);
String $upg_click_cost = ""; //String.valueOf(upg_click_cost);
String $upg_click_level = ""; //String.valueOf(upg_click_level);
String $upg_click_effect = ""; //String.valueOf(upg_click_effect);

public void onTap(View view){
    if (upg_click_level == 0){
        upg_click_level = 1;
        $upg_click_level = String.valueOf(upg_click_level);
        upg_click_effect = 1;
        upg_click_effect = upg_click_level * upg_click_effect;
        $upg_click_effect = String.valueOf(upg_click_effect);
    }
    do_llars = do_llars + upg_click_effect;
    $do_llars = String.valueOf(do_llars);
    dollars.setText($do_llars);
}

当您将值赋值给upg_click_cost时,您可以以同样的方式初始化$upg_click_cost。但是,与单独维护int和string变量不同,我建议您在任何地方显示do_llars, upg_click_cost, upg_click_effect, upg_click_level的值,使用String.valueOf(do_llars), String.valueOf(upg_click_cost), String.valueOf(upg_click_effect), String.valueOf(upg_click_level),这样每次更改int变量时都不需要将更新后的值分配给String变量。

票数 0
EN

Stack Overflow用户

发布于 2015-08-22 06:20:27

将dollars.setText($do_llars)改为view..setText($do_llars);

票数 0
EN

Stack Overflow用户

发布于 2015-08-22 06:29:23

本声明如下:

代码语言:javascript
复制
String $do_llars = String.valueOf(do_llars);

在为do_llars分配任何值之前执行,这可能会导致空引用异常。

解决方案:在给do_llars赋值后调用上面的语句,或者尝试Syed Zainul Abedin的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32152735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档