简体   繁体   中英

ListView in android not saving ratingBar stars

I have a problem with a listView that I made that has a ratingbar and a texview element.Its a very simple program that is meant to displays the list and stores the value of the stars that the user enters into the ratingBar. Unfortunately for some reason when I scroll up and down the rows that go out of the screen, when scrolled back in have their stars changed back to their intial value.The code is below. If anyone could help that would be great. Thanks.

package com.example.test;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.TextView;

public class MainActivity extends Activity implements RatingBar.OnRatingBarChangeListener {

private String[] textList = {"Pikachu","Raichu","Raticate","Ratata","Absol","Abra","Kadabra","Pidgey","Mime","Meowth","Mew","Squirtle","Blastoise","Goop","Kilobyte","Armada"};
private ArrayList<String> list = new ArrayList<String>();
ListView listView;

protected void onCreate(Bundle icicle) 
{
    super.onCreate(icicle);
    setContentView(R.layout.activity_main);

    for(int i=0; i<textList.length; i++)
    {
        list.add(i,textList[i]);
    }

    listView = (ListView)findViewById(R.id.listRow);
    listView.setAdapter(new setListView(list));
}

class setListView extends ArrayAdapter<String>
{
    public setListView(ArrayList<String> list)
    {
        super(MainActivity.this, R.layout.custom_layout, R.id.text, list);
    }

    public View getView(int position, View convertView, ViewGroup parent)
    {
        View row = convertView;

        if(convertView == null)
        {
            LayoutInflater inflater = getLayoutInflater();
            row = inflater.inflate(R.layout.custom_layout, parent, false);
        }

        RatingBar ratingBar = (RatingBar)row.findViewById(R.id.rating);
        RatingBarInfo rating;
        rating = (RatingBarInfo)ratingBar.getTag();
        if(rating == null)
        {
            rating = new RatingBarInfo(position);
            ratingBar.setTag(rating);
        }
        ratingBar.setRating(rating.getRating());

        TextView text = (TextView)row.findViewById(R.id.text);
        text.setText(list.get(position));

        return(row);
    }
}

class RatingBarInfo
{
    float rating;
    int position;

    public RatingBarInfo(int positionTemp)
    {
        rating = 2.0f;
        position = positionTemp;
    }

    public void setRating(float ratingTemp)
    {
        rating = ratingTemp;
    }

    public float getRating()
    {
        return rating;
    }

    public int getPosition()
    {
        return position;
    }
}

public void onRatingChanged(RatingBar ratingBar, float rating,boolean fromUser) 
{
    RatingBarInfo ratingChange = (RatingBarInfo)ratingBar.getTag();
    ratingChange.setRating(rating);
    ratingBar.setTag(ratingChange);
    ((ArrayAdapter<String>)listView.getAdapter()).notifyDataSetChanged();
}
}

You forgot to set OnRatingBarChangeListener on your RatingBar. Just add this line into your getView() method and it should works well.

ratingBar.setOnRatingBarChangeListener(MainActivity.this)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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