2016-12-07 14 views
1

私はListViewTextViewRatingBarを持っている、と私はListViewに各リストにRatingBarの値を保存したい、それがカスタムアダプタで可能です?Android - カスタムアダプタでratingBarを処理する方法は?

私は同類を行うために使用するコード:

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をタップしたい感じです、アンタッチャブルです。

私は何か間違っていましたか?お願い助けて。

EDIT: 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" /> 
+0

'float getRatingStar()'はおそらく0を返してはいけません。 – Blackbelt

+0

@BlackBeltはまだ動作していません、私は戻り値0を変更しましたratingStar、別の方法がありますか? – dondo

+0

どういう意味ですか*しかし、私がアプリを実行すると、RatingBarは触れることができません* – Blackbelt

答えて

2

RatingBarので、使用しているスタイルの読み取り専用です。

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

、それを動作させ、真の属性android:isIndicatorを設定した方法で経験しています。あなたはその行を取り除くことができますか、

+0

それは仕事です、ありがとう!もう1つの質問は許可されていますか?もちろん – dondo

+0

。それを撃つ – Blackbelt

+0

ボタンをクリックすると 'ListView'の各リストに' RatingBar'の値を保存する方法がありますか?私は実際に 'RatingBar'のすべての値を' MySQL'に送りたいと思いますが、それは難しいと思います。 – dondo

関連する問題