Как иметь статический значок только для первых двух ListItems в ListView

Привет, у меня есть статический список, у меня есть общий ImageView для всех как значок. Я хочу добавить значок только для первых двух элементов и ничего не отдыхаю. Как это возможно, если у вас есть общий держатель изображения? Ниже мой код:

Посмотреть список

public class SectionListExampleActivity extends ListActivity {
 /** Called when the activity is first created. */

 ArrayList<item> items = new ArrayList<item>();

 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);


 items.add(new SectionItem("Category 1"));
 items.add(new EntryItem("Item 1", "This is item 1.1"));
 items.add(new EntryItem("Item 2", "This is item 1.2"));
 items.add(new EntryItem("Item 3", "This is item 1.3"));


 items.add(new SectionItem("Category 2"));
 items.add(new EntryItem("Item 4", "This is item 2.1"));
 items.add(new EntryItem("Item 5", "This is item 2.2"));
 items.add(new EntryItem("Item 6", "This is item 2.3"));
 items.add(new EntryItem("Item 7", "This is item 2.4"));

 items.add(new SectionItem("Category 3"));
 items.add(new EntryItem("Item 8", "This is item 3.1"));
 items.add(new EntryItem("Item 9", "This is item 3.2"));
 items.add(new EntryItem("Item 10", "This is item 3.3"));
 items.add(new EntryItem("Item 11", "This is item 3.4"));
 items.add(new EntryItem("Item 12", "This is item 3.5"));

 EntryAdapter adapter = new EntryAdapter(this, items);

 setListAdapter(adapter);
 }

 @Override
 protected void onListItemClick(ListView l, View v, int position, long id) {

 if(!items.get(position).isSection()){

 EntryItem item = (EntryItem)items.get(position);

 Toast.makeText(this, "You clicked " + item.title , Toast.LENGTH_SHORT).show();


 }

 super.onListItemClick(l, v, position, id);
 }
}
</item></item>

EntryAdapter

public class EntryAdapter extends ArrayAdapter<item> {

 private Context context;
 private ArrayList<item> items;
 private LayoutInflater vi;

 public EntryAdapter(Context context,ArrayList<item> items) {
 super(context,0, items);
 this.context = context;
 this.items = items;
 vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 }


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

 final Item i = items.get(position);
 if (i != null) {
 if(i.isSection()){
 SectionItem si = (SectionItem)i;
 v = vi.inflate(R.layout.list_item_section, null);

 v.setOnClickListener(null);
 v.setOnLongClickListener(null);
 v.setLongClickable(false);

 final TextView sectionView = (TextView) v.findViewById(R.id.list_item_section_text);
 sectionView.setText(si.getTitle());
 }else{
 EntryItem ei = (EntryItem)i;
 v = vi.inflate(R.layout.list_item_entry, null);
 final TextView title = (TextView)v.findViewById(R.id.list_item_entry_title);
 final TextView subtitle = (TextView)v.findViewById(R.id.list_item_entry_summary);

 if (title != null) 
 title.setText(ei.title);
 if(subtitle != null)
 subtitle.setText(ei.subtitle);
 }
 }
 return v;
 }

}
</item></item></item>

макет:

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minheight="?android:attr/listPreferredItemHeight" android:gravity="center_vertical" android:paddingright="?android:attr/scrollbarSize">

 <imageview android:id="@+id/list_item_entry_drawable" android:layout_width="wrap_content" android:layout_height="fill_parent" android:src="@android:drawable/ic_menu_preferences" android:paddingleft="9dp">

 <relativelayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginleft="10dip" android:layout_marginright="6dip" android:layout_margintop="6dip" android:layout_marginbottom="6dip" android:layout_weight="1">

 <textview android:id="@+id/list_item_entry_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleline="true" android:textappearance="?android:attr/textAppearanceLarge" android:ellipsize="marquee" android:fadingedge="horizontal">

 <textview android:id="@+id/list_item_entry_summary" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/list_item_entry_title" android:layout_alignleft="@id/list_item_entry_title" android:textappearance="?android:attr/textAppearanceSmall" android:singleline="true" android:textcolor="?android:attr/textColorSecondary">

 </textview></textview></relativelayout>

</imageview></linearlayout>
2 ответа

В вашем методе getView вас уже есть позиция.

Таким образом, вы можете сделать

if (position < 2) {
 // show image
} else {
 // remove image using setVisibility(View.GONE)
}


Основываясь на приведенных выше замечаниях, вот пример реализации (это входит в ваше else место), разместите его соответственно):

...
...
final ImageView imageicon = (ImageView)v.findViewById(R.id.list_item_entry_drawable);

if(subtitle != null)
 subtitle.setText(ei.subtitle); 

if(position == 1 || position ==2) {
 // this will show the image icon for the first and second view
 imageicon.setVisibility(View.VISIBLE);
 // now set the icon to the image view here..
 // imageicon.setImageResource(R.drawable.ok);
}
else {
 // this will hide the image icon, optional if you want
 imageicon.setVisibility(View.GONE);
}
...
...

licensed under cc by-sa 3.0 with attribution.