Einbetten RatingBar in AlertDialog

Ich habe eine ListView enthält RatingBar zu zeigen, wenn Sie auf das Element der LisView es ein pop-Dialog(AlertDialog), darunter eine RatingBar, jetzt Frage ich mich:

  1. Wie Gewohnheit die RatingBar, die im Dialog angezeigt wird(Der code unten funktioniert nicht, ich denke, es ist becase der letzten, dass es nicht sein kann customiezed).
  2. So passieren die Bewertung aus dem Dialog RatingBar das ListView-RatingBar.

Mein aktuelle code:

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);

Edit1

Ich habe gezeigt, daß die Bewertung auf das Element der listview mit der fileListAdapter(eine Instanz von FileListAdapater als code1). Nun die Probleme:

  1. Die Bewertung der Veränderungen nach dem dialog geklickt, aber es ist nicht das Element, das ich geklickt habe, wie Karte das Element mit der Bewertung(Dialogfeld) ändern.
  2. Wie bewahren Sie die Bewertung, jedes mal, wenn das ListView-refreshs, die Bewertung verschwindet.

Habe ich den code, den der dialog auf der onItemClickListener als code2.

code1:

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
    }
}

code2:

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();
InformationsquelleAutor twlkyao | 2013-12-23
Schreibe einen Kommentar