如何使用Java在一个类中声明多个变量?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (169)

我有一个任务是在Android Studio中构建一个简单的多小部件应用程序,我试图弄清楚如何在一个类中为多页照片评级应用程序声明多个变量。我有4页,RatingBar每张照片下面有4张照片。我想让所有评级的平均值显示在页面顶部。为简单起见,我使用它来转换为页面标题SetTitle

如何以这样的方式编写这个java,我可以访问我的所有4个评级并将基本数学应用于它们?这在技术上超出了我们迄今为止在本课程中所教授的内容。

package ca.bcit.comp2052.a00587366.multiplewidgetsapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RatingBar;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

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

        // Start of rating bar

        RatingBar ratingBar1 = (RatingBar) findViewById(R.id.ratingBar1);
        ratingBar1.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar1, float rating, boolean fromUser) {
                // Implement your logic here               

                float total = 0;
                total += ratingBar1.getRating();
//                total += ratingBar2.getRating();
//                total += ratingBar3.getRating();
//                total += ratingBar4.getRating();
                float average = total / 4;
                setTitle("Average: " + average);

            }
        });
        // end of rating bar
        Button buttonNext = (Button) findViewById(R.id.nextButton);
        buttonNext.setOnClickListener(new 
        android.view.View.OnClickListener() {
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, 
        Main2Activity.class));
            }
        });
    }
}
提问于
用户回答回答于

你可能应该把它们作为R.id.ratingBars[0]等等,但既然你没有,假设它已经R.id.ratingBar1通过R.id.ratingBar4,你可以这样做:

final RatingBar[] ratingBars = {
    (RatingBar) findViewById(R.id.ratingBar1),
    (RatingBar) findViewById(R.id.ratingBar2),
    (RatingBar) findViewById(R.id.ratingBar3),
    (RatingBar) findViewById(R.id.ratingBar4)
};

for (final RatingBar ratingBar : ratingBars) {
    ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
        @Override
        public void onRatingChanged(RatingBar bar, float rating, boolean fromUser) {
            // Implement your logic here               

            float total = 0.0f;
            for (final RatingBar ratingBar : ratingBars) {
                total += ratingBar.getRating();
            }
            float average = total / 4.0f;
            setTitle("Average: " + average);
        }
    });
}

RatingBar如果需要,这也可以更容易地添加新的s。您只需将它们添加到顶部的原始阵列初始化列表中,即可完成所有操作。

用户回答回答于

可以尝试通过调用它们

Main2Activity.ratingBar2.getRating()

但它们应该是公开的,这不是太好。

在其他地方,您可以将它们声明为private,并使用create public getter方法从外部类中检索它们。

扫码关注云+社区

领取腾讯云代金券