【问题标题】:How to set Rating Bar using Array List如何使用数组列表设置评分栏
【发布时间】:2023-03-06 00:21:01
【问题描述】:

我尝试使用 Array List 设置 Rating Bar 的值,我将 rating 的值设置为 Float,但我不知道如何设置该值并将其显示到 Rating Bar,我使用 listview 来显示数据。请帮我解决这个问题

这是我的 Artikel 活动,我将评分栏设置为浮动

包 com.example.latihanlist;

public class Artikel {
    private int imageId;
    private float ratingId;
    private String title;
    private String timestamp;
    private String descriptions;

    public Artikel(int imageId, String title, String timestamp, String
            descriptions, float ratingId) {
        this.imageId = imageId;
        this.title = title;
        this.timestamp = timestamp;
        this.descriptions = descriptions;
        this.ratingId = ratingId;
    }
    public int getImageId() {
        return imageId;
    }

    public float getRatingId() {
        return ratingId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getTimestamp() {
        return timestamp;
    }
    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }
    public String getDescriptions() {
        return descriptions;
    }
    public void setDescriptions(String descriptions) {
        this.descriptions = descriptions;
    }
}

这里是我的 MainActivity,我设置了 rating 2.0 的值

package com.example.latihanlist;

        import androidx.appcompat.app.AppCompatActivity;

        import android.content.Intent;
        import android.os.Bundle;
        import android.view.View;
        import android.view.ViewStub;
        import android.widget.AdapterView;
        import android.widget.Button;
        import android.widget.ListView;
        import android.widget.RatingBar;
        import android.widget.Toast;
        import java.util.ArrayList;
        import java.util.List;


public class MainActivity extends AppCompatActivity {
    private ViewStub stubList;
    private ListView listview;
    private ListViewArrayAdapter listViewArrayAdapter;
    private List<Artikel> artikelList;

    private List<Artikel> getArtikelList() {
        artikelList= new ArrayList<>();
        artikelList.add(new Artikel(R.drawable.mob,"Title 1","1 hours ago","Descriptions of text 1", "2.0"));
        artikelList.add(new Artikel(R.drawable.mob,"Title 2","1 hours ago","Descriptions of text 2", "2.0"));
        artikelList.add(new Artikel(R.drawable.mob,"Title 3","1 hours ago","Descriptions of text 3", "2.0"));
        artikelList.add(new Artikel(R.drawable.mob,"Title 4","1 hours ago","Descriptions of text 4", "2.0"));
        artikelList.add(new Artikel(R.drawable.ic_launcher_background,"Title 5","1 hours ago","Descriptions of text 5", "2.0"));
        return artikelList;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        stubList=(ViewStub) findViewById(R.id.stublist);
        stubList.inflate();
        listview=(ListView) findViewById(R.id.list_view);
        stubList.setVisibility(View.VISIBLE);

        getArtikelList();
        listViewArrayAdapter=new ListViewArrayAdapter(this,R.layout.list_item,artikelList);
        listview.setAdapter(listViewArrayAdapter);


        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               // Toast.makeText(getApplicationContext(),
                   //     artikelList.get(position).getTitle(), Toast.LENGTH_SHORT).show();

                Bundle bundle = new Bundle();
                bundle.putString("dataTitle", artikelList.get(position).getTitle().toString());
                bundle.putInt("dataImg", artikelList.get(position).getImageId());
                bundle.putString("dataDesc", artikelList.get(position).getDescriptions().toString());

                Intent intent = new Intent(MainActivity.this, DetailBerita.class);
                intent.putExtras(bundle);
                startActivity(intent);

            }
        });

        Button mBtn_login = (Button)findViewById(R.id.button1);
        mBtn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, MenuApkAndroid.class);
                startActivity(intent);
            }
        });

    }

}

这是我的 list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:src="@drawable/mob"/>
    <TextView
        android:id="@+id/textTitle"
        android:text="Title of the Text"
        android:layout_marginLeft="75dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"/>
    <TextView
        android:id="@+id/textTime"
        android:layout_below="@id/textTitle"
        android:text="1 hours ago"
        android:layout_marginLeft="75dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="9dp"/>
    <TextView
        android:id="@+id/textDesc"
        android:layout_below="@+id/textTime"
        android:text="This is descriptions of the title of text"
        android:layout_marginLeft="75dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:textSize="10dp"/>

    <RatingBar
        android:id="@+id/ratingBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="75dp"
        android:numStars="5"
        android:stepSize="1.0"
         />
</RelativeLayout>

【问题讨论】:

  • 嗨。你能把你的customeArrayAdapter代码贴在这里吗?

标签: android arrays listview


【解决方案1】:

让我们讨论 RatingBar 的第一个行为。

官方文档说:

使用支持用户交互的 RatingBar 时,放置小部件 不鼓励在 RatingBar 的左侧或右侧。

设置的星数(通过 setNumStars(int) 或在 XML 布局中) 将在布局宽度设置为包裹内容时显示(如果另一个 布局宽度已设置,结果可能无法预测)。

如果您将任何视图放在 RatingBar 的左侧或右侧,则意味着 RatingBar 将无法正常工作。

如果您将 RatingBar 宽度设置为 wrap_content 之外,它也将不起作用。

“但是我需要 RatingBar 的左视图或右视图或两者都有。有可能吗?”

是的!!!

“怎么样?”

将 RatingBar 单独放在 Layout.Something 中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="8dp">
    <TextView
        android:id="@+id/cell1"
        android:layout_width="0dp"
        android:layout_weight="2"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/cell2"
        android:layout_width="0dp"
        android:layout_weight="2"
        android:layout_height="wrap_content" />
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <RatingBar
        android:id="@+id/ratingBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numStars="5"
        android:stepSize="1.0"
        />
</LinearLayout>


</LinearLayout>

更多详情请查看官方RatingBar

现在,进入正题。我的解决方案在哪里??

除了 Artikel Object 中的 rating 参数之外,您的所有代码都很好。根据您对类的定义,它必须是浮点数。我认为编译器会给您该错误。

由于您使用的是RelativeLayout,所以我认为您也不会遇到左右问题。

您需要正确设置 ArrayAdapter。

看看以下内容:

public class ListViewArrayAdapter extends ArrayAdapter<Artikel> {
    Context mContext;
    ArrayList<Artikel> mArtikels;
    public ListViewArrayAdapter(@NonNull Context context, @NonNull ArrayList<Artikel> artikels) {
        super(context, 0, artikels);
        mContext = context;
        mArtikels = artikels;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View listItem = convertView;
        if (listItem ==null){
            listItem = LayoutInflater.from(mContext).inflate(R.layout.artikel_list_item,parent,false);
        }
        Artikel artikel = mArtikels.get(position);

        ImageView imageView = listItem.findViewById(R.id.imageView);
        TextView title = listItem.findViewById(R.id.textTitle);
        TextView time = listItem.findViewById(R.id.textTime);
        TextView disc = listItem.findViewById(R.id.textDesc);
        RatingBar ratingBar = listItem.findViewById(R.id.ratingBar);

        imageView.setImageResource(artikel.getImageId());
        title.setText(artikel.getTitle());
        time.setText(artikel.getTimestamp());
        disc.setText(artikel.getDescriptions());

        ratingBar.setRating(artikel.getRatingId());

        return listItem;
    }
}

希望它会有所帮助。 Full Source code is here

如果可行,请投票。编码愉快。

谢谢

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多