2

私が作成した、ratingbar と texview 要素を持つ listView に問題があります。これは、リストを表示し、ユーザーが ratingBar に入力した星の値を格納するための非常に単純なプログラムです。残念ながら、何らかの理由で、画面の外に出る行を上下にスクロールすると、スクロールして戻ると、星が元の値に戻ります。コードは以下のとおりです。誰かがそれを助けることができれば、それは素晴らしいことです. ありがとう。

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();
}
}
4

1 に答える 1

0

RatingBar に OnRatingBarChangeListener を設定するのを忘れました。この行を getView() メソッドに追加するだけで、うまく機能するはずです。

ratingBar.setOnRatingBarChangeListener(MainActivity.this)
于 2013-01-05T08:29:27.330 に答える