마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Rating Bar를 커스텀 리스트뷰에 넣으려고합니다

0 추천
package com.example.sec.myapplication;

import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;


public class CustomListviewActivity extends ActionBarActivity {
    private RatingBar ratingBar;
    private TextView value;


    ListView list;
    String[] titles = {
            "The Wizard of Oz (1939)",
            "Citizen Kane (1941)",
            "All About Eve (1950)",
            "The Third Man (1949)",
            "A Hard Day's Night (1964)",
            "Modern Times (1936)",
            "Metropolis (1927)",
            "Metropolis (1927)",
            "Metropolis (1927)",
            "Metropolis (1927)"
    } ;
    Integer[] images = {
            R.drawable.movie1,
            R.drawable.movie2,
            R.drawable.movie3,
            R.drawable.movie4,
            R.drawable.movie5,
            R.drawable.movie6,
            R.drawable.movie7,
            R.drawable.movie7,
            R.drawable.movie7,
            R.drawable.movie7
    };
int[] ratingValues;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);



        CustomList adapter = new
                CustomList(CustomListviewActivity.this);
        list = (ListView) findViewById(R.id.list);
        list.setAdapter(adapter);


        setListViewHeightBasedOnChildren(list);

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                ScrollView scroll = (ScrollView) findViewById(R.id.scroll);
                scroll.smoothScrollTo(scroll.getLeft(), scroll.getTop());
                LinearLayout li = (LinearLayout) findViewById(R.id.li);
                li.setVisibility(View.VISIBLE);
                ImageView iv = (ImageView) findViewById(R.id.image);
                iv.setImageResource(images[position]);
                TextView text1 = (TextView) findViewById(R.id.text1);
                text1.setText(titles[position]);

            }


        });



    }


    public void SetupRatingBar() {

        ratingBar = (RatingBar) findViewById(R.id.ratingBar);
        value = (TextView) findViewById(R.id.value);

        ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {

            public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {

                value.setText(String.valueOf(rating));

            }
        });
    }



    /**** Method for Setting the Height of the ListView dynamically.
     **** Hack to fix the issue of not showing all the items of the ListView
     **** when placed inside a ScrollView  ****/
    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null)
            return;

        int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.UNSPECIFIED);
        int totalHeight = 0;
        View view = null;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            view = listAdapter.getView(i, view, listView);
            if (i == 0)
                view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, ActionBar.LayoutParams.WRAP_CONTENT));

            view.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
            totalHeight += view.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
        listView.requestLayout();
    }

    public class CustomList extends ArrayAdapter<String> {
        private final Activity context;
        public CustomList(Activity context ) {
            super(context, R.layout.listitem, titles);
            this.context = context;
        }
        @Override
        public View getView(int position, View view, ViewGroup parent) {
            LayoutInflater inflater = context.getLayoutInflater();
            View rowView= inflater.inflate(R.layout.listitem, null, true);
            ImageView imageView = (ImageView) rowView.findViewById(R.id.image);
            TextView title = (TextView) rowView.findViewById(R.id.title);
            TextView rating = (TextView) rowView.findViewById(R.id.value);
            TextView genre = (TextView) rowView.findViewById(R.id.genre);
            TextView year = (TextView) rowView.findViewById(R.id.releaseYear);

            title.setText(titles[position]);
            imageView.setImageResource(images[position]);
            rating.setText("1.0"+value+"");
            genre.setText("DRAMA");
            year.setText(1930+position+"");
            return rowView;
        }
    }

}

JAVA코드는 위와 같고요 질문하려는 문제점은 2가지입니다.

 

1)

리스트 뷰를 항목 하나를 클릭하면 사진이 확대되고 밑에 타이틀이랑 RatingBar를 넣었습니다.

저는 이 레이팅바의 별점을 올리면 현재의 리스트뷰의 항목에서 레이팅바 별점이 적용되고

다른 리스트뷰 항목에서는 새롭게 레이팅바 별점을 주고싶은데요 위에 코드같이 해놓으면

한번 레이팅바 별점을 설정하면 모든 리스트 뷰에서 같은 별점을 나타냅니다  이걸 리스트뷰 개별마다

레이팅바를 적용 시키게 하는 방법을 질문하려고 합니다

 

2) 두번재는 요 레이팅바 점수를 놓으면 리스트화면 rating값으로 넣고싶은데요

아래 코드값으로 주면은 value값이 창에는 항상 null값으로 고정되는데요 요 값을 레이팅 별점수 변화에

따라서 바꾸고 싶은데요 어떻게 해야할가요 ?

rating.setText("1.0"+value+"");
익명사용자 님이 2015년 12월 12일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...