Turkcell | Geleceği Yazanlar

Soru & Cevap

android listview adapter

09.11.2014 - 21:11

Eclipse de kendimce yapmaya çalıştığım küçük bir uygulamada takıldım JSon ile çekmiş olduğum 4 satır veriyi listview de tek satırda text olarak göstere biliyorum ancak adapter kullanarak özelleştirmeye gelince örnek olarak gelen verilerin ilk altı tanesi resim son 3 tanesi text bunu adaptere atarak 4 satırlık veriyi listview de nasıl göstereceğim resimler res/drawable içinde mevcut örnek olarak

res/drawable/image1.png - res/drawable/image2.png - res/drawable/image3.png - res/drawable/image4.png - res/drawable/image5.png - res/drawable/image6.png resimler JSon ile gelen veri örnek olarak 1,2,3,4,5,6,text,text,text bu veriyi adapter kullanarak listview de nasıl göstereceğim

4166 Görüntülenme

5 Cevap

Erdem
04.10.2016 - 18:04

Selam,

Bunu custom listview adapter yazarak halledebilirsin.

public class AdvancedListAdapter extends ArrayAdapter < Object > {

 private View view;
 private LayoutInflater inflater;
 private List < Object > objects;

 public static class ViewHolder {
  public TextView textView1;
  public TextView textView2;
  public TextView textView3;
  public TextView textView4;
  public TextView textView5;
  public CheckBox checkBox1;
  public Spinner spinner;
 }

 //Constructor
 public AdvancedListAdapter(Context context, List < Object > objects) {
  super(context, -1, objects);
  this.objects = objects;
  inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 }

 @Override
 public void addAll(Collection < ? extends Object > collection) {
  for (Object oj: collection) {
   objects.add(oj);
  }
 }

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

 public List < Object > getItems() {
  if (objects != null)
   return objects;
  return new ArrayList < Object > ();
 }

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

  if (view == null) {
   if (getItem(position) instanceof Person) {
    view = inflater.inflate(R.layout.list_item_person, parent, false);
   } else if (getItem(position) instanceof EquipmentAsset) {
    view = inflater.inflate(R.layout.list_item_equipment_asset, parent, false);
   }

   holder = new ViewHolder();
   holder.textView1 = (TextView) view.findViewById(R.id.textView1);
   holder.textView2 = (TextView) view.findViewById(R.id.textView2);
   holder.textView3 = (TextView) view.findViewById(R.id.textView3);
   holder.textView4 = (TextView) view.findViewById(R.id.textView4);
   holder.textView5 = (TextView) view.findViewById(R.id.textView5);
   holder.spinner = (Spinner) view.findViewById(R.id.spStatus);
   holder.checkBox1 = (CheckkBox) view.findViewById(R.id.checkBox1);
   view.setTag(holder);

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

  Object item = getItem(position);
  if (item instanceof Person) {
   populateForPerson(holder, (Person) item, position);
  } else if (item instanceof EquipmentAsset) {
   populateForEquipmentAsset(holder, (EquipmentAsset) item, position);
  }

  return view;
 }

 public void populateForPerson(ViewHolder holder, Person person, int position) {
  holder.textView1.setText(person.getPersonID());
  holder.textView2.setText(person.getUserName());
  holder.textView3.setText(person.getDepartment());
  holder.textView4.setText(person.getTitle());
  holder.textView5.setText(person.getLocation());
 }

 public void populateForEquipmentAsset(ViewHolder holder, EquipmentAsset equipmentAsset, int position) {
  holder.textView1.setText(equipmentAsset.getSerialnum());
  holder.textView2.setText(equipmentAsset.getItemnum());
  holder.textView3.setText(equipmentAsset.getItemDesc());
  holder.textView4.setText(equipmentAsset.getAssetNum());
  holder.textView5.setText(equipmentAsset.getDescription());
  holder.textView6.setText(equipmentAsset.getLocation());
  holder.textView7.setText(equipmentAsset.getStatus());

  checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
   @Override
   public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if (checkBox1.isChecked()) {
     //...
    } else {
     //...
    }
   }
  });

  holder.spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
   @Override
   public void onItemSelected(AdapterView < ? > parent, View view, int position, long id) {
    //...
   }

   @Override
   public void onNothingSelected(AdapterView < ? > parent) {}
  });
 }
}

 

Objeleri kendi kullandığın objelere göre düzenlemeyi unutma. Yazdığın classı da activityden şu şekilde çağırabilirsin :

public class PersonActivity extends FragmentActivity {


 private AdvancedListAdapter personAdapter;
 private ListView listViewPerson;
 private ArrayList < Person > personList;


 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.layout_hedehodo);
  initializeUI();
  if (personAdapter == null) {
   personAdapter = new AdvancedListAdapter(this, new ArrayList < Object > ());
  }

  personAdapter.clear(); //adapter içindeki verileri siler
  personAdapter.addAll(personList); //refere edilen listeyi adaptere yükler
  personAdapter.notifyDataSetChanged();
 }



 private void initializeUI() {
  listViewPerson = (ListView) findViewById(R.id.listViewPerson);
 }


 @Override
 protected void onResume() {
  super.onResume();
  listViewPerson.setAdapter(personAdapter);
 }

 @Override
 protected void onDestroy() {
  super.onDestroy();
 }

}

Unutmaman gereken bir nokta da ArrayList sınıfından olan person objesinin null veya boş olmaması.

İyi çalışmalar

 

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Muhammed ÇOBANOĞLU
10.11.2014 - 18:30

Custom ListView Adapter ile ilgili şuraya bakabilirsin. 

http://muhammedcobanoglu.wordpress.com/2014/11/10/android-custom-listview/

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Serkan GÖKÇE
10.11.2014 - 18:12

301 eğitimde anlatına yapıyorum yapamadığım şey yan yana 6 resim 3 text içeren örnek
kisiler.add(new Kisi("Ahmet Yılmaz", false))  yerine
sonuclar.add(new Sonuc(1,2,3,4,5,6,"text1","text2","text3")) şeklinde yapmak satır layout içinde de gelen değer
1,2,3,4,5,6 yı
image1.png, image2.png, image3.png, image4.png, image5.png, image6.png ve text, text, text şeklinde yazmak nadense bir türlü beceremedim satır layotum
aşağıdaki gibi sonuc class ını ve OzelAdapter kodlamada sıkıntım var neyse kendim çıkamadım işin içinden sizlerinde zamanını almak istemiyorum allaha emanet olun yorumlarınız için teşekkürler...
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
 
    <ImageView
       android:id="@+id/img1"
       android:layout_width="32dp"
       android:layout_height="32dp" />

    <ImageView
       android:id="@+id/img2"
       android:layout_width="32dp"
       android:layout_height="32dp" />

    <ImageView
       android:id="@+id/img3"
       android:layout_width="32dp"
       android:layout_height="32dp" />

    <ImageView
       android:id="@+id/img4"
       android:layout_width="32dp"
       android:layout_height="32dp" />

    <ImageView
       android:id="@+id/img5"
       android:layout_width="32dp"
       android:layout_height="32dp" />

    <ImageView
       android:id="@+id/img6"
       android:layout_width="32dp"
       android:layout_height="32dp" />

 
    <TextView
       android:id="@+id/txt1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />

    <TextView
       android:id="@+id/txt2"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />

    <TextView
       android:id="@+id/txt3"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />
 
</LinearLayout>

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Kurtuluş Ahmet Temel
10.11.2014 - 00:37

Geleceği Yazanlar Android 301 Eğitimi içerisinde ListView Özelleştirmesi konusu içerisinde sana Custom Adapter kullanımını anlatıyor. Bir göz atmanı tavsiye ederim.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Baki Mustafa
09.11.2014 - 22:41

Merhaba Serkan,

Size bir referans örnek link vereceğim oradan gerekli editlemeri yaparsanız istediğinizi gerçekleştirebilirsiniz.

Referans link için Tıklayınız..

İyi çalışmalar..

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.