Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中设置listview特定行的背景?_Android_Android Listview - Fatal编程技术网

如何在android中设置listview特定行的背景?

如何在android中设置listview特定行的背景?,android,android-listview,Android,Android Listview,在我的应用程序中,用户订购家用产品,应用程序在列表视图中显示产品名称和价格,我想为缺货的产品设置不同的背景。有人能帮我吗 公共类产品扩展了BaseAdapter{ public ArrayList<HashMap<String, String>> list; Activity activity; boolean Connection; public Products(Activity activity, ArrayList<HashMap<

在我的应用程序中,用户订购家用产品,应用程序在列表视图中显示产品名称和价格,我想为缺货的产品设置不同的背景。有人能帮我吗

公共类产品扩展了BaseAdapter{

public ArrayList<HashMap<String, String>> list;
Activity activity;

boolean Connection;

public Products(Activity activity,
        ArrayList<HashMap<String, String>> list) {
    super();
    this.activity = activity;
    this.list = list;
}

public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
}

public Object getItem(int position) {
    // TODO Auto-generated method stub
    return list.get(position);
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

class ViewHolder {

    TextView item_name,item_price,product_id,item_stock;


}

public View getView(final int position, View convertView,
        final ViewGroup parent) {
    // TODO Auto-generated method stub

    final ViewHolder holder;
    LayoutInflater inflater = activity.getLayoutInflater();


    if (convertView == null) {

        convertView = inflater.inflate(R.layout.submenutext, null);

        if(ITEM_AVALIABLE_QUANTITY.equalsIgnoreCase("0")){

            convertView.setBackgroundResource(R.drawable.heading);
        }
        /*else{
            convertView.setBackgroundResource(R.drawable.sub_menu);
        }*/
        holder = new ViewHolder();

        holder.product_id = (TextView) convertView.findViewById(R.id.hide_text);
        holder.item_name = (TextView) convertView.findViewById(R.id.text);
        holder.item_price = (TextView) convertView.findViewById(R.id.price);
        //holder.item_stock = (TextView)convertView.findViewById(R.id.stock);

        convertView.setTag(holder);

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

    final HashMap<String, String> map = list.get(position);
    holder.product_id.setText(map.get(PRODUCT_ID));
    holder.item_name.setText(map.get(ITEM_NAME_COLUMN));
    holder.item_price.setText(map.get(ITEM_PRICE_COLUMN));
    holder.item_stock.setText(map.get(ITEM_AVALIABLE_QUANTITY));

    /*if(holder.item_stock.equals("0")){

        convertView.setBackgroundResource(R.drawable.heading);
    }*/

    return convertView;
}
公共数组列表;
活动;
布尔连接;
公共产品(活动、,
ArrayList(列表){
超级();
这个。活动=活动;
this.list=列表;
}
public int getCount(){
//TODO自动生成的方法存根
返回list.size();
}
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回列表。获取(位置);
}
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
类视图持有者{
text查看项目名称、项目价格、产品id、项目库存;
}
公共视图getView(最终整型位置,视图转换视图,
最终视图组(父视图){
//TODO自动生成的方法存根
最终持票人;
LayoutInflater充气器=活动。getLayoutInflater();
if(convertView==null){
convertView=充气机。充气(R.layout.submenutext,空);
if(项目可用数量等于信号案例(“0”)){
convertView.setBackgroundResource(R.drawable.heading);
}
/*否则{
convertView.setBackgroundResource(R.drawable.sub_菜单);
}*/
holder=新的ViewHolder();
holder.product\u id=(TextView)convertView.findViewById(R.id.hide\u text);
holder.item_name=(TextView)convertView.findViewById(R.id.text);
holder.item_price=(TextView)convertView.findViewById(R.id.price);
//holder.item_stock=(TextView)convertView.findViewById(R.id.stock);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
final HashMap map=list.get(位置);
holder.product_id.setText(map.get(product_id));
holder.item_name.setText(map.get(item_name_列));
holder.item_price.setText(map.get(item_price_列));
holder.item_stock.setText(map.get(item_available_QUANTITY));
/*if(持有人项目库存等于(“0”)){
convertView.setBackgroundResource(R.drawable.heading);
}*/
返回视图;
}

}您可以在适配器getView中设置背景。 代码如下所示:

        @Override
    public View getView(int position, View convertView, ViewGroup parent) {


        ViewHolder holder = null;

          if (convertView == null) {


            LayoutInflater vi = (LayoutInflater)  getContext().getSystemService (Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.listsearchitem, null);
            }

  //.................

            // then you could set the backgorun for the out of stock products
            convertView.setBackgroundResource(resid)

            //.................
      }

我希望您熟悉编写自定义适配器来设置列表视图。您可以管理缺货产品状态以及产品名称和日期的列表项。在CustomAdapter getView方法上,您可以检查列表项的状态并设置其背景颜色,或者设置相应的图像可绘制。 例如:


您可以将数据发送到具有自己的自定义布局的自定义适配器

Main.java

  ListAdapter  adapter = new ListAdapter(this, arrayList);//ListAdapter is custom Adapter  
hotelList.setAdapter(adapter);  // hotellist is instance of ListView
这是您的自定义适配器.java文件。此类有一个单独的视图,即列表行

public class LazyAdapterForReminder extends BaseAdapter {    
private Activity activity;   
private static LayoutInflater inflater=null;   

public LazyAdapterForReminder(Activity a, ArrayList<HashMap<String, String>> d) {
    activity = a;
    data=d;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

public int getCount() {
    return data.size();
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.list_row, null);
 TextView lv = (TextView)vi.findViewByID(R.id.blabla);    

   if(stock==o)
       lv.setBackgroundResource(R.color.red);
   else
       lv.setBackgroundResource(R.color.green);

    return vi;
}
公共类LazyAdapterForReminder扩展BaseAdapter{
私人活动;
专用静态充气机=空;
公共懒散调适师(活动a,阵列列表d){
活动=a;
数据=d;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
}
public int getCount(){
返回data.size();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
if(convertView==null)
vi=充气机充气(R.layout.list_行,空);
TextView lv=(TextView)vi.findViewByID(R.id.blabla);
如果(库存==o)
lv.setBackgroundResource(红色);
其他的
lv.setBackgroundResource(R.color.green);
返回vi;
}

}

根据适配器中的
缺货数据修改视图背景。您需要为
列表视图中的项目位置设置标志。然后在listview适配器的
getView
方法中调用setBackground方法。是的,使用基本适配器,对于每个视图,您可以设置另一种颜色:),例如,如果您使用颜色传递列表。。因此,对于每个视图位置,您将从中获得另一种颜色list@Henry如何设置,我不知道如何更改特定的行背景。@Lumma无法在简单适配器中设置它。请参阅上面的代码。它将显示所有详细信息,但无法设置背景。@Yugesh:getView方法在哪里?如果没有getView方法,您如何处理该视图中的项目?仍然无法设置颜色?请参阅我更新的项目。是否要将listview的背景设置为正确?然后以listview为例并设置其背景。。如何在基本适配器内使用列表视图。@Amy,stock是一个控制视图背景的值。它可能是数据模型中的值。如果库存==0,则为视图设置适当的颜色,否则为库存=0为该特定视图设置不同的颜色。
public class LazyAdapterForReminder extends BaseAdapter {    
private Activity activity;   
private static LayoutInflater inflater=null;   

public LazyAdapterForReminder(Activity a, ArrayList<HashMap<String, String>> d) {
    activity = a;
    data=d;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

public int getCount() {
    return data.size();
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.list_row, null);
 TextView lv = (TextView)vi.findViewByID(R.id.blabla);    

   if(stock==o)
       lv.setBackgroundResource(R.color.red);
   else
       lv.setBackgroundResource(R.color.green);

    return vi;
}