AlertDialog中的RatingBar:如何以编程方式更改星数?

时间:2013-03-22 14:15:43

标签: java android android-alertdialog ratingbar

我尝试在AlertDialog中显示一个RatingBar(它经常从处理程序中调用)。

我的问题是我不能改变星星的数量。我知道那里有很多答案,但总是通过xml,我不想要。

有人可以帮忙吗?

public void taskRatingPopup() {
    final AlertDialog.Builder popDialog = new AlertDialog.Builder(this);
    final RatingBar rating = new RatingBar(this);
    rating.setMax(5);
    rating.setNumStars(5);
    rating.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));


    popDialog.setIcon(android.R.drawable.btn_star_big_on);
    popDialog.setTitle("BlaBla");
    popDialog.setView(rating);

    // Button OK
    popDialog.setPositiveButton(android.R.string.ok,
    new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {

    writeRatingFile(rating.getProgress());

    //Remove the dialog
    dialog.dismiss();
    }

    })

    // Button Cancel
    .setNegativeButton("Cancel",
    new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
    dialog.cancel();
    }
    });

    popDialog.create();
    popDialog.show();
}

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

//code block
        public void itemRatingPopup() {
            final AlertDialog.Builder popDialog = new AlertDialog.Builder(
                    mainScreen);
            final RatingBar rating = new RatingBar(mainScreen);
            rating.setNumStars(5);
            rating.setStepSize(0.1f);
            rating.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT));
            LinearLayout parent = new LinearLayout(mainScreen);
            parent.setGravity(Gravity.CENTER);
            parent.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                    LayoutParams.MATCH_PARENT));
            parent.addView(rating);

            // popDialog.setIcon(android.R.drawable.btn_star_big_on);
            popDialog.setTitle(mainScreen.getResources().getString(
                    R.string.user_ratings));
            popDialog.setView(parent);

            // Button OK
            popDialog.setPositiveButton(R.string.submit,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            String fanid = StorageManager.getInstance()
                                    .getSharedPrefs(mainScreen)
                                    .getString(AppConstants.PREFS_FAN_ID, "0");
                            if (fanid != null) {
                                new SubmitUserRatingAsyncTask("Item", ""
                                        + item.getId(), fanid, rating.getRating())
                                        .execute();
                            }
                            dialog.dismiss();
                        }
                    }).setNegativeButton(R.string.cancel,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });
            popDialog.create();
            popDialog.show();
        }

你的对话用户界面不会显示5颗星,它可能会显示任意数量的开始,因为你已将RatingBar指定为Dialog的根视图,以供参考,参见上面的代码:

    you can change rating programatically by below code:
    float myRating=0f;
    rating.setRating(myRating)

答案 1 :(得分:0)

添加号码评分栏中的星星, 只需获取该号码并使用此标记。

rb_rate.setNumStars(<no.of stars,integer value>);