2015-10-14 2 views
1

Мой вопрос очень прост: у меня есть пользовательский адаптер, который устанавливает изображение в ListView:Android ListView пользовательского адаптера

package com.tred.stars; 

import android.app.Activity; 
import android.content.ClipData; 
import android.content.Context; 
import android.graphics.Color; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import android.widget.Toast; 

public class CustomListAdapter extends ArrayAdapter<String> { 

public static String selected_pers= "Graziana Grasso"; 
Activity context; 
String[] itemname; 
Integer[] imgid; 


public CustomListAdapter(Activity context, String[] itemname, Integer[] imgid) { 
    super(context, R.layout.mylist, itemname); 
    // TODO Auto-generated constructor stub 

    this.context=context; 
    this.itemname=itemname; 
    this.imgid=imgid; 

} 




public View getView(int position,View view,ViewGroup parent) { 

    String[] description ={ 
      "desc", 
      "desc", 
      "desc", 
      "desc", 
      "desc", 
      "desc", 
      "desc", 
      "desc" 
    }; 

    LayoutInflater inflater=context.getLayoutInflater(); 
    View rowView=inflater.inflate(R.layout.mylist, null, true); 

    TextView txtTitle = (TextView) rowView.findViewById(R.id.pers_name); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.pers_image); 
    TextView extratxt = (TextView) rowView.findViewById(R.id.pers_comment); 
    LinearLayout llrow = (LinearLayout) rowView.findViewById(R.id.row); 
    Toast.makeText(getContext(), selected_pers, Toast.LENGTH_SHORT).show(); 

    if (getItem(position).toString()==selected_pers){ 
     llrow.setBackgroundColor(Color.parseColor("#29A3CC")); 
    } 

    txtTitle.setText(itemname[position]); 
    imageView.setImageResource(imgid[position]); 
    extratxt.setText(description[position]); 
    return rowView; 

}; 

}

И в моей деятельности я установить адаптер к моему ListView:

DrawerListView = (ListView) findViewById(R.id.drawerLW); 
    CustomListAdapter adapter = new CustomListAdapter(this, itemname, imgid); 
    DrawerListView.setAdapter(adapter); 

Но когда я запустить приложение метод GetView в CustomListAdaper, кажется, повторяется непрерывно и переменную selected_pers кажется нулевым.

+0

Какая линия не работает? Например, какой selected_pers имеет значение null – Keith

+0

getView будет вызван много раз. хорошо. http://stackoverflow.com/questions/11648995/view-is-getting-inflated-everytime-in-getview-findviewbyid-is-done-many-ti – Raghunandan

+0

попробуйте вот это 'itemname [position] .toString() == selected_pers' – pRaNaY

ответ

1

Изменить эту строку:

mInflater.inflate(R.layout.mylist, null, true); 

To:

mInflater.inflate(R.layout.mylist, parent, false); 

И вы не можете использовать == при сравнении строк. Измените эту строку:

if (getItem(position).toString()==selected_pers) 

To:

if (getItem(position).toString().equals(selected_pers)) 

Кроме того, посмотрите на this example, чтобы узнать, как реализовать правильный & эффективный ListView.

Смежные вопросы