繁体   English   中英

如何在列表视图中保存评分栏的评分

[英]how to save rating of rating bar in list view

我需要帮助以将评分栏的评分保存在每个项目的列表视图中。我的问题是我该怎么办,因为OnItemClickListener无法正常工作。 这是我的自定义阵列适配器的外观

public class CustomArrayAdapter extends ArrayAdapter<String> {
public ArrayList<String> ratings;
private Activity context;
private int[] imageID;
private String[] stdName;
private double[] GPA;
private String[] course;
private String[] rollNo;
public float cRating;

public CustomArrayAdapter(Activity context, int[] imageID, String[] stdName,    double[] GPA, String[] course, String[] rollNo) {
    super(context, R.layout.row_design, stdName);
    this.context = context;
    this.imageID = imageID;
    this.stdName = stdName;
    this.GPA = GPA;
    this.course = course;
    this.rollNo = rollNo;
}

static  class ViewContainer
{
    public ImageView stdImage;
    public ImageView possibleImage;
    public TextView primaryTV;
    public TextView secondryTV;
    public RatingBar ratingBar;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewContainer viewContainer;
    View rowView = convertView;
   if(rowView == null) {
       //converting the XML file into view objects
       LayoutInflater inflater = context.getLayoutInflater();
       rowView = inflater.inflate(R.layout.row_design, null, true);
       viewContainer = new ViewContainer();

       //getting the refrence of widgets
       viewContainer.stdImage = (ImageView) rowView.findViewById(R.id.student_image);
       viewContainer.possibleImage = (ImageView) rowView.findViewById(R.id.possibility_image);
       viewContainer.primaryTV = (TextView) rowView.findViewById(R.id.primary_text_view);
       viewContainer.secondryTV = (TextView) rowView.findViewById(R.id.secondry_text_view);
       viewContainer.ratingBar = (RatingBar) rowView.findViewById(R.id.rating_bar);


       rowView.setTag(viewContainer);
   } else {
       viewContainer = (ViewContainer) rowView.getTag();
       viewContainer.ratingBar.setRating(0.0f);
       rowView.setBackground(null);
   }
    viewContainer.ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
        @Override
        public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
            cRating = rating;
        }
    });
    //setting the possible values to widgets
    viewContainer.stdImage.setImageResource(imageID[position]);
    viewContainer.primaryTV.setText(stdName[position] + " (GPA:" + GPA[position] + ")");
    viewContainer.secondryTV.setText(course[position] + " (RollNo:" + rollNo[position] + ")");

    if (GPA[position] < 3.0) {
        rowView.setBackgroundResource(android.R.color.holo_red_light);
        viewContainer.possibleImage.setImageResource(R.drawable.cross_small);
    } else {
        viewContainer.possibleImage.setImageResource(R.drawable.tick_small);
    }

    return rowView;
}

}

这是我想要获得评分的活动

public class StudentSelectionActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_student_selection);
    //getting the refrence of list view
    ListView listView = (ListView) findViewById(R.id.list);
    //creating object of Rating activity to access it's public instances
    final MainActivity obj = new MainActivity();
    //creating custom adapter
    final CustomArrayAdapter adapter = new CustomArrayAdapter(this, obj.imageID, obj.stdName, obj.GPA, obj.course, obj.rollNo);
    listView.setAdapter(adapter);
    //handling events  on click listener of list view
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(StudentSelectionActivity.this, "rating = " + adapter.cRating, Toast.LENGTH_SHORT).show();
        }
    });
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_selected_students, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

}

您在适配器类中使用另一个可单击类,因此setOnItemClickListener不适用于适配器类。 因此,一种选择是在适配器类中使用Click侦听器。

rowView.setOnClickListener(new View.onClickListener()
{
 //Perform your operation.

});

创建一个Entry类。 此类包含您的属性,例如cRating 然后,将CustomArrayAdapter扩展为ArrayAdapter<Entry>而不是ArrayAdapter<String> 将构造函数更改为这样

public CustomArrayAdapter(Context context, int layoutResourceID, List<Entry> listItems) {
    super(context, layoutResourceID, listItems);
    this.context = context;
    this.itemList = listItems;
    this.layoutResID = layoutResourceID;
}

在您的getView方法中使用

EventDetailEntry item = this.itemList.get(position);

获得相应的物品。 使用此项目设置等级。 然后,您的onItemClicked方法应该可以按预期工作。 希望这很清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM