gpt4 book ai didi

Android - 如何处理自定义适配器中的 ratingBar?

转载 作者:行者123 更新时间:2023-11-29 19:27:22 26 4
gpt4 key购买 nike

我在 ListView 中有一个 TextViewRatingBar,我想在每个上保存 RatingBar 的值在 ListView 中列出,可以使用自定义适配器吗??

我用来做的代码喜欢:

PertanyaanAdapter.java

package flix.yudi.pertanyaan3;

import android.app.Activity;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.RatingBar;
import android.widget.TextView;

import java.util.List;

class PertanyaanAdapter extends ArrayAdapter<Pertanyaan> {

private AppCompatActivity activity;
private List<Pertanyaan> movieList;

PertanyaanAdapter(AppCompatActivity context, int resource, List<Pertanyaan> objects) {
super(context, resource, objects);
this.activity = context;
this.movieList = objects;
}

@Override
public Pertanyaan getItem(int position) {
return movieList.get(position);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

if (convertView == null) {
convertView = inflater.inflate(R.layout.item_listview, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);

} else {
holder = (ViewHolder) convertView.getTag();
//holder.ratingBar.getTag(position);
}

holder.ratingBar.setOnRatingBarChangeListener(onRatingChangedListener(position));

holder.ratingBar.setTag(position);
holder.ratingBar.setRating(getItem(position).getRatingStar());
holder.movieName.setText(getItem(position).getAsk());

return convertView;
}

private RatingBar.OnRatingBarChangeListener onRatingChangedListener(final int position) {
return new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float v, boolean b) {
Pertanyaan item = getItem(position);
assert item != null;
item.setRatingStar(v);
Log.i("Adapter", "star: " + v);
}
};
}

private static class ViewHolder {
private RatingBar ratingBar;
private TextView movieName;

ViewHolder(View view) {
ratingBar = (RatingBar) view.findViewById(R.id.rate_img);
movieName = (TextView) view.findViewById(R.id.text);
}
}
}

Pertanyaan.java

package flix.yudi.pertanyaan3;
public class Pertanyaan {

private float ratingStar;
private String ask;

Pertanyaan(int ratingStar, String ask) {
this.ratingStar = ratingStar;
this.ask = ask;
}

float getRatingStar() {
return 0;
}

void setRatingStar(float ratingStar) {
this.ratingStar = ratingStar;
}

public String getAsk() {
return ask;
}

}

MainActivity.java

public class MainActivity extends AppCompatActivity {

ListView listView;
ArrayList<Pertanyaan> listPertanyaan;
ArrayAdapter<Pertanyaan> adapter2;
ProgressDialog pDialog;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView)findViewById(R.id.list_view);
listPertanyaan = new ArrayList<>();
getpertanyaan get= new getpertanyaan();
get.execute();
adapter2 = new PertanyaanAdapter(this, R.layout.item_listview, listPertanyaan);
listView.setAdapter(adapter2);
}

protected void onStart() {
super.onStart();

}

private class getpertanyaan extends AsyncTask<Void, Void, Integer> {
ArrayList<Pertanyaan> list;
protected void onPreExecute() {
pDialog=new ProgressDialog(MainActivity.this);
pDialog.setTitle("Nama Dosen");
pDialog.setMessage("Menampilkan nama dosen... Mohon tunggu...!");
pDialog.setCancelable(false);
pDialog.show();
super.onPreExecute();
list = new ArrayList<>();
}

@Override
protected Integer doInBackground(Void... params) {
InputStream is = null;
String result = "";

try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://flix.16mb.com/send_data.php");
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
// Get our response as a String.
is = entity.getContent();
} catch (IOException e) {
e.printStackTrace();
}

//convert response to string
try {
BufferedReader reader = null;
if (is != null) {
reader = new BufferedReader(new InputStreamReader(is, "utf-8"));
}
String line;
if (reader != null) {
while ((line = reader.readLine()) != null) {
result += line;
}
}
if (is != null) {
is.close();
}
//result=sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
// parse json data
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
JSONObject jsonObject = jArray.getJSONObject(i);
list.add(new Pertanyaan(0,jsonObject.getString("ask")));
}

} catch (JSONException e) {
e.printStackTrace();
}
return null;
}

protected void onPostExecute(Integer result) {
if (pDialog.isShowing())
pDialog.dismiss();
listPertanyaan.addAll(list);
adapter2.notifyDataSetChanged();
}
}
}

但是当我运行应用程序时,RatingBar 是不可触摸的,只是 ListView 的每个列表都是触摸的,但是我想点击 RatingBar .

我是不是做错了什么?请帮助我。

编辑:item_listview.xml

<RatingBar
android:id="@+id/rate_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/text"
android:numStars="5"
android:stepSize="1"
style="@style/Widget.AppCompat.RatingBar.Indicator" />

<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold" />

最佳答案

由于您使用的样式,RatingBar 是只读的。

style="@style/Widget.AppCompat.RatingBar.Indicator"

将属性 android:isIndicator 设置为 true,这使得它以正在体验的方式表现出来。您可以去掉该行,或者尝试在您的 item_listview.xml

中强制 android:isIndicator 为 false

关于Android - 如何处理自定义适配器中的 ratingBar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41012640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com