我有一个包含ratingbar的listview来指示某些内容,如果单击lisview的项,它将弹出一个对话框(alertdialog),其中包括ratingbar,现在我想知道:
如何自定义对话框中显示的ratingbar(下面的代码不起作用,我想是因为final,所以无法自定义)。
如何将rating get从对话框ratingbar传递到listview ratingbar。
我现在的代码是:

final RatingBar ratingBar = new RatingBar(getApplicationContext());
ratingBar.setRating(0);
ratingBar.setStepSize(1);
ratingBar.setNumStars(2);
builder.setTitle(R.string.alertdialog_title)
.setIcon(android.R.drawable.ic_dialog_info)
.setView(ratingBar)
.setPositiveButton("Submit", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
        // do something.
    }
})
.setNegativeButton("Cancel", null);

编辑1
我已经用filelistadapter(filelistadapater的一个实例代码1)显示了listview项的评级。现在的问题是:
单击对话框后,分级将更改,但不是我单击的项目,如何将项目与分级(在对话框上)映射更改。
如何存储评级,每次ListView刷新时,评级都会消失。
我已将OnEmClickListener上的对话代码设置为代码2。
代码1:
public class FileListAdapter extends BaseAdapter {
private Context context;
private ArrayList<File> files; // The ArrayList to store the files
private boolean isSDcard; // To indicate whether the file is the SDcard
private LayoutInflater mInflater; // The LayoutInflater

public FileListAdapter (Context context, ArrayList<File> files, boolean isSDcard) {
    this.context = context;
    this.files = files;
    this.isSDcard = isSDcard;
    mInflater = LayoutInflater.from(context);
}

@Override
public int getCount () {
    return files.size();
}

@Override
public Object getItem (int position) {
    return files.get(position);
}

@Override
public long getItemId (int position) {
    return position;
}

@Override
public View getView (int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    /**
     * The view is not initialized,initialize the view according to the layout file,
     * and bind it to tag.
     */
    if(convertView == null) {
        viewHolder = new ViewHolder();
        convertView = mInflater.inflate(R.layout.file_list_item, null); // Inflate from the layout file
        convertView.setTag(viewHolder);
        viewHolder.file_title = (TextView) convertView.findViewById(R.id.file_title); // Find the file_title textview
        viewHolder.file_icon = (ImageView) convertView.findViewById(R.id.file_icon); // Find the file_icon imageview
        viewHolder.file_path = (TextView) convertView.findViewById(R.id.file_path); // Find the file_path textview
        viewHolder.encrypt_level = (RatingBar) convertView.findViewById(R.id.encrypt_level); // Find the rating_bar view
    } else {
          viewHolder = (ViewHolder) convertView.getTag();
    }
    File file = (File) getItem(position);
    if(position == 0 && !isSDcard) { // Add the back to SDcard item
        viewHolder.file_title.setText(R.string.back_to_sdcard);
        viewHolder.file_icon.setImageResource(R.drawable.sdcard_icon);
        viewHolder.file_path.setText(Environment.getExternalStorageDirectory().toString());
        viewHolder.encrypt_level.setRating(0);
    }
    if(position == 1 && !isSDcard) { // Add the back to parent item
        viewHolder.file_title.setText(R.string.back_to_parent);
        viewHolder.file_icon.setImageResource(R.drawable.folder_up_icon);
        viewHolder.file_path.setText(file.getPath());
        viewHolder.encrypt_level.setRating(0);
    } else { // The current filepath is the SDcard or the position is neither 0 nor 1
          String fileName = file.getName();
          viewHolder.file_title.setText(fileName);
          viewHolder.file_path.setText(file.getPath());
          viewHolder.encrypt_level.setRating(0);
          if(file.isDirectory()) { // The variable file is a directory
              viewHolder.file_icon.setImageResource(R.drawable.folder_icon);
          } else { // The variable file is a file
              viewHolder.file_icon.setImageResource(R.drawable.file_icon);
          }
      }

 return convertView;
}
    private class ViewHolder {
        private ImageView file_icon; // The icon of the file
    private TextView file_title; // The title of the file
    private TextView file_path; // The path of the file
    private RatingBar encrypt_level; // The encrypt level of the file
    }
}

小精灵:
final Dialog rankDialog = new Dialog(MainActivity.this, R.style.FullHeightDialog);
rankDialog.setContentView(R.layout.rank_dialog);
rankDialog.setCancelable(true);
final RatingBar ratingBar = (RatingBar)rankDialog.findViewById(R.id.dialog_ratingbar);

TextView text = (TextView) rankDialog.findViewById(R.id.rank_dialog_text1);
text.setText("Set Rating!");

Button updateButton = (Button) rankDialog.findViewById(R.id.rank_dialog_button);
updateButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d(Tag, ratingBar.getRating() + "");
        RatingBar ratebar = (RatingBar) findViewById(R.id.encrypt_level); // The RatingBar in the ListView.
    ratebar.setRating(ratingBar.getRating()); // Change the rating.
    rankDialog.dismiss();
}
});
rankDialog.show();

最佳答案

尝试使用分级栏自定义对话框。
喜欢

Button rankBtn = (Button) findViewById(R.id.rank_button);
rankBtn.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
        rankDialog = new Dialog(MyActivity.this, R.style.FullHeightDialog);
        rankDialog.setContentView(R.layout.rank_dialog);
        rankDialog.setCancelable(true);
        ratingBar = (RatingBar)rankDialog.findViewById(R.id.dialog_ratingbar);
        ratingBar.setRating(userRankValue);

        TextView text = (TextView) rankDialog.findViewById(R.id.rank_dialog_text1);
        text.setText(name);

        Button updateButton = (Button) rankDialog.findViewById(R.id.rank_dialog_button);
        updateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                rankDialog.dismiss();
            }
        });
        //now that the dialog is set up, it's time to show it
        rankDialog.show();
    }
});

这里是layout/rank_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="2dip">

     <TextView android:text="Doctor's Name" android:id="@+id/rank_dialog_text1"
         android:textSize="24dp" android:layout_marginTop="10dp"
         android:layout_width="wrap_content" android:layout_height="wrap_content"
         android:layout_gravity="center"/>

     <RatingBar
         android:layout_marginTop="10dp" android:layout_marginBottom="10dp"
         android:layout_width="wrap_content" android:layout_height="wrap_content"
         android:clickable="true"
         android:id="@+id/dialog_ratingbar" android:layout_gravity="center"
         android:numStars="5" android:stepSize="1.0" android:rating="2"
         android:isIndicator="false"/>

     <Button android:id="@+id/rank_dialog_button"
         android:layout_height="wrap_content"
         android:text="Update"  android:focusable="false"
         android:layout_margin="5dip" android:textColor="#FFF8C6"
         android:textSize="20dip" android:layout_width="fill_parent" />

</LinearLayout>

值/my_style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="FullHeightDialog" parent="android:style/Theme.Dialog">
  <item name="android:windowNoTitle">true</item>
  </style>
</resources>

有关更多帮助,请访问tutorial

07-24 09:45
查看更多