提问者:小点点

Android Studio:制作随机数生成器应用程序,随机数不显示?


我有EditViews来提示用户输入最小值和最大值。输入的数据被传递给Activity函数并生成一个随机数。该随机数被传递给另一个要显示的Activity。当我输入最小值和最大值,然后单击生成按钮时,我被引导到一个空白屏幕。但是,我期望显示randValue。

MainActivity.java

public class MainActivity extends AppCompatActivity {
public final static String RAND_NUM = "com.example.random.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void generateNum(View view) {
    Intent intent = new Intent(this, DisplayNumActivity.class);

    EditText minInput = (EditText) findViewById(R.id.min_num);
    EditText maxInput = (EditText) findViewById(R.id.max_num);

    int minNum = Integer.parseInt(minInput.getText().toString());
    int maxNum = Integer.parseInt(maxInput.getText().toString());
    Random rand = new Random();
    int randNum = rand.nextInt(maxNum - minNum) + minNum;
    intent.putExtra(RAND_NUM, randNum);
    startActivity(intent);

  }
}

DisplayNumActivity.java

public class DisplayNumActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_num);

    Intent intent = getIntent();
    String randValue = intent.getStringExtra(MainActivity.RAND_NUM);

    TextView textView = new TextView(this);
    textView.setTextSize(30);
    textView.setText(randValue);

    ViewGroup layout = (ViewGroup) findViewById(R.id.activity_display_num);
    layout.addView(textView);

  }
}

activity_main. xml

<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:orientation="horizontal"
    tools:context="com.example.random.MainActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Min number"
    android:id="@+id/textView"
    android:layout_marginTop="40dp"
    android:layout_alignParentTop="true"
    android:layout_alignLeft="@+id/textView2"
    android:layout_alignStart="@+id/textView2" />

<EditText
    android:id="@+id/min_num"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="min"
    android:inputType="number"
    android:layout_marginTop="32dp"
    android:layout_below="@+id/textView"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Max number"
    android:id="@+id/textView2"
    android:layout_marginTop="43dp"
    android:layout_below="@+id/min_num"
    android:layout_centerHorizontal="true" />

<EditText
    android:id="@+id/max_num"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="max"
    android:inputType="number"
    android:minWidth="500dp"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:onClick="generateNum"
    android:id="@+id/button"
    android:layout_below="@+id/max_num"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="43dp" />

共3个答案

匿名用户

好吧,两件事:

1)在DisplayNumActivity中,更改

String randValue=int. getStringExtra(MainActivity.RAND_NUM);

对此:

int randValue=int. getIntExtra(MainActivity.RAND_NUM,0);

这里我们从意图中读取一个int值,而不是一个字符串。在您的主要活动中,您在此处保存了一个int,而不是一个String,此处的String只是键值对中的“键”。零只是默认值,以防它找不到您的int。

2)要显示数字,您必须首先将该int更改回字符串以便在TextView中设置它,然后我们将其显示为您的相对布局,如下所示:

String stringRandValue = Integer.toString(randValue);
View relativeLayout =  findViewById(R.id.activity_display_num);;
TextView textView = new TextView(this);
textView.setTextSize(30);
textView.setText(stringRandValue);
((RelativeLayout)relativeLayout).addView(textView);

这应该行得通。

匿名用户

换掉这个

String randValue=int. getStringExtra(MainActivity.RAND_NUM);

有了这个

字符串randValue=int. getIntExtra(MainActivity.RAND_NUM,default_int_value);

匿名用户

我认为您必须准确指定要将文本视图添加到哪个布局。

喜欢:RelativeLayout relativelayout=(RelativeLayout)findViewById(R.id. relativelayoutID);

投射到视组对我来说似乎有点重。请尝试建议的方式,如果它对你有什么影响,请告诉我。

编辑:还有一件事,我觉得可能是罪魁祸首在这种情况下,这是缺少布局参数为您的文本视图。

示例://创建这样的参数

LayoutParams layoutparams = new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT );

//像这样设置布局参数

textView.setLayoutParams(layoutparams);

注意-根据添加此text View的xml替换父布局类型。