2016-12-03 84 views
1

我是新来的android和堆栈溢出,所以我想说如果我做错了事,也不会违反规则和白痴问题,对不起!ANDROID - 如何在listview中定义ratingbar id?

我想知道如何在listview通过ID 定义ratingbar我的意思是,如何知道哪些ratingbar列表就是让明星?

我一直在试图从网的教程,但它很难找到参照, 据我知道,我需要大约getView()的实现来获得ratingBar位置,但我不知道该怎么添加代码,

有人可以帮我解决这个问题吗?

+0

有一些想法吗?请! – dondo

+0

我刚刚google了一下,发现这个https://www.raywenderlich.com/124438/android-listview-tutorial – hadilq

+0

@hadilq你能解释一下'receipeAdapter'在上面的链接中有什么功能吗?为什么它应该添加'receipeAdapter'? – dondo

回答

0

只需

  • 创建自定义列表视图...
  • 自定义适配器
  • 和自定义适配器处理的评价吧。

这里是rating_bar_list_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 


<LinearLayout 
    android:padding="10dp" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Food Rating" 
    android:id="@+id/textView" 
    android:layout_gravity="center_horizontal" /> 

<RatingBar 
    android:layout_margin="5dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/ratingBar" 
    android:layout_gravity="center_horizontal" /> 

</LinearLayout> 

这里是RatingListCustomAdapter.java

public class RatingListCustomAdapter extends BaseAdapter { 

ArrayList<String> ratingItemName; 
Context context; 
RatingListCustomAdapter(Context context, ArrayList<String> list){ 
    ratingItemName = list; 
    this.context = context; 
} 

@Override 
public int getCount() { 
    return 0; 
} 

@Override 
public Object getItem(int i) { 
    return null; 
} 

@Override 
public long getItemId(int i) { 
    return 0; 
} 

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 
    View v = view; 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = inflater.inflate(R.layout.rating_bar_list_item, viewGroup, false); 


    TextView itemName = (TextView) v.findViewById(R.id.textView); 
    itemName.setText(ratingItemName.get(i).toString()); 
    RatingBar ratingBar = (RatingBar) v.findViewById(R.id.ratingBar); 

    ratingBar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      /*...Here you can get which rating bar is clicked.. where i is the position of the rating bar in list */ 
     } 
    }); 

    ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
     @Override 
     public void onRatingChanged(RatingBar ratingBar, float v, boolean b) { 
      //Here handle your rating bar clicked operation ... get id of clicked rating bar 
      Log.d("rating_bar_clicked","Rating bar id: "+ratingBar.getId()+ " Value:"+String.valueOf(v)); 
     } 
    }); 


    return v; 
} 

}

现在主要只设置适配器列表视图..

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

    listView = (ListView) findViewById(R.id.listView); 
    listView.setAdapter(new RatingListCustomAdapter(this,itemNameList)); 
+0

哇,这是一个很好的代码,但是我知道哪些代码是点击或不是哪个评级栏的? – dondo

+0

兄弟...有一个深刻的印象...我有评论该功能..... in。RatingListCustomAdapter。java的 ** getView()onRatingChanged()**你也可以定义** ratingBar.setOnClickListner()**也 –

+0

我看你的代码上面兄弟..我的意思是它的'OnRatingChanged'是代码时评级变化,我想实现按钮中的代码,我有一个逻辑像;当点击按钮时,它将保存列表中的任何评级值并将其发送到服务器, – dondo

0

请按照下面的链接来演示您在listView中使用评级栏的要求。

http://www.devexchanges.info/2015/11/rating-bar-in-listview-android.html

+0

我已阅读上面的链接和[此链接](http://www.thaicreate.com/mobile/android-vote-rating-php-mysql.html)但在上面的链接问题是我有一个TextView获得从互联网通过json,并在我的链接,我不需要创建另一个布局来填补评级,这意味着,我需要上面的链接工作与json in arraylist在线,并在我的链接我不需要另一个布局, – dondo

0

该适配器旨在将数据连接到视图。如果您知道MVC,则适配器将Model连接到View,如您可以从该教程的该图片中看到的那样(https://koenig-media.raywenderlich.com/uploads/2016/01/adapter.png)。

为什么我们应该使用适配器是因为它们使生活更轻松。当您考虑“数据”时,您不需要考虑“视图”,只需将数据放入适配器,并在考虑“视图”时,适配器就知道有关“数据”的所有信息。