2016-03-24 28 views
-1

Android programında yeni bir imim var Özel bir ListView yapmaya çalışıyorum. YouTube'daki bir eğiticiyi takip ediyorum (https://www.youtube.com/watch?v=gAIB4fTm2BA) ancak bir parça üzerinde çalışamıyorum.Fragmandaki Özel Liste işe yaramıyor

public class DriverFragment extends Fragment implements GeneralFragment { 

ListView listView; 
public DriverFragment() { 

    // Required empty public constructor 
} 



@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view; 
    view = inflater.inflate(R.layout.fragment_driver, container, false); 
    listView = (ListView) view.findViewById(R.id.driverList); 
    DriverAdapter driverAdapter = new DriverAdapter(getActivity().getApplicationContext(),R.layout.driver_listview); 
    listView.setAdapter(driverAdapter); 
    Driver a = new Driver("John Smith","[email protected]","123"); 

    driverAdapter.add(a); 

    return view; 
} 

Sürücü Adaptörü: ince olan buna bir şey eklemeden önce ListView için adaptör ayarlarken gibi

public class DriverAdapter extends ArrayAdapter { 
ArrayList list = new ArrayList(); 

public DriverAdapter(Context context, int resource) { 
    super(context, resource); 
} 


static class Holder{ 
    TextView NAME; 
    TextView EMAIL; 
    TextView PHONE; 
} 
public void add(Driver driver) { 
    list.add(driver); 
    super.add(driver); 

} 

@Override 
public Object getItem(int position) { 
    return this.list.get(position); 
} 

public int getCount(){ 
    return this.list.size(); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row; 
    row = convertView; 
    Holder holder; 
    if(convertView == null) { 
     LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = layoutInflater.inflate(R.layout.driver_listview, parent, false); 
     holder = new Holder(); 
     holder.NAME = (TextView) row.findViewById(R.id.driverName); 
     holder.EMAIL = (TextView) row.findViewById(R.id.driverMail); 
     holder.PHONE = (TextView) row.findViewById(R.id.driverPhone); 
     row.setTag(holder); 
    }else { 
     holder = (Holder) row.getTag(); 

    } 
    Driver driver = (Driver)getItem(position); 
    holder.NAME.setText(driver.getName()); 
    holder.EMAIL.setText(driver.getMail()); 
    holder.PHONE.setText(driver.getPhone()); 

    return row; 

} 

XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="DriverName" 
    android:id="@+id/driverName" 
    android:padding="10dp" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="DriverMail" 
    android:id="@+id/driverMail" 
    android:layout_gravity="center_horizontal" 
    android:padding="10dp" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="DriverPhone" 
    android:id="@+id/driverPhone" 
    android:padding="10dp" /> 

cevap

0

, çabuk birlikte bir şeyler koymak

public class DriverAdapter extends BaseAdapter { 
ArrayList<Driver> data = new ArrayList(); 

public void add(Driver driver) { 
    data.add(driver); 
    notifyDataSetChanged(); 
} 

public void addAll(List<Driver> drivers) { 
    data.addAll(drivers); 
    notifyDataSetChanged(); 
} 

@Override 
public Driver getItem(int position) { 
    return data.get(position); 
} 

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

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

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

    if (convertView == null) { 
     LayoutInflater layoutInflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = layoutInflater.inflate(R.layout.item_driver_row, parent, false); 
     holder = new Holder(); 
     holder.name = (TextView) convertView.findViewById(R.id.driverName); 
     holder.email = (TextView) convertView.findViewById(R.id.driverMail); 
     holder.phone = (TextView) convertView.findViewById(R.id.driverPhone); 
    } else { 
     holder = (Holder) convertView.getTag(); 

    } 

    Driver driver = getItem(position); 
    holder.name.setText(driver.getName()); 
    holder.email.setText(driver.getEmail()); 
    holder.phone.setText(driver.getPhone()); 
    convertView.setTag(holder); 

    return convertView; 
} 

static class Holder { 
    TextView name; 
    TextView email; 
    TextView phone; 
} 

}.

Listeler ve Adaptörler, Android geliştirmenin ayrılmaz bir parçası olduğundan ve nasıl çalıştığına dair bir anlayışa sahip olmasından dolayı bu konular hakkında daha fazla bilgi edinmenizi şiddetle tavsiye ederim.

public class Driver { 

    private String name; 
    private String email; 
    private String phone; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getPhone() { 
     return phone; 
    } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 
} 

Fragment:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment, container, false); 
     ListView listView = (ListView) view.findViewById(R.id.listView); 

     Driver a = new Driver(); 
     a.setName("Name"); 
     a.setEmail("Email"); 
     a.setPhone("Phone"); 

     ArrayList<Driver> drivers = new ArrayList<>(); 
     drivers.add(a); 

     DriverAdapter driverAdapter = new DriverAdapter(getActivity().getApplicationContext(),R.layout.driver_listview, drivers); 
     listView.setAdapter(driverAdapter); 

     return view; 

    } 

Adaptör

public class DriverAdapter extends ArrayAdapter<Driver> { 


    public DriverAdapter(Context context, int resource, List<Driver> objects) { 
     super(context, resource, objects); 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row; 
     row = convertView; 
     Holder holder; 
     if(convertView == null) { 
      LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = layoutInflater.inflate(R.layout.driver_listview, parent, false); 
      holder = new Holder(); 
      holder.name = (TextView) row.findViewById(R.id.driverName); 
      holder.email = (TextView) row.findViewById(R.id.driverMail); 
      holder.phone = (TextView) row.findViewById(R.id.driverPhone); 
      row.setTag(holder); 
     }else { 
      holder = (Holder) row.getTag(); 

     } 
     Driver driver = getItem(position); 
     holder.name.setText(driver.getName()); 
     holder.email.setText(driver.getEmail()); 
     holder.phone.setText(driver.getPhone()); 

     return row; 
    } 

    public class Holder { 
     protected TextView name; 
     protected TextView email; 
     protected TextView phone; 
    } 
} 

Adaptör XML: Bu size yardımcı olmazsa, sizin parçası gösteren bir sorun

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/driverName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:text="DriverName" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@android:color/black" /> 

    <TextView 
     android:id="@+id/driverMail" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:padding="10dp" 
     android:text="DriverMail" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@android:color/black" /> 

    <TextView 
     android:id="@+id/driverPhone" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:text="DriverPhone" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@android:color/black" /> 

</LinearLayout> 

var cihazda. Bunu kendim test ettim ve ekranda doğru şekilde görüntüleniyor.

0

görünüyor Ancak listeyi yeni verilerle güncellemek için adapter.notifyDataSetChanged() yöntemini çağırmalısınız.

Bağdaştırıcınızı nasıl oluşturduğunuzu değiştirmenizi öneririm. Her çeşit adaptör kullandım, daha önce veri listemi oluşturup kurucudan geçiriyorum. Sonra onu liste listeme ayarlayın. Yani şöyle:

View view; 
    view = inflater.inflate(R.layout.fragment_driver, container, false); 
    listView = (ListView) view.findViewById(R.id.driverList); 

    Driver a = new Driver("John Smith","[email protected]","123"); 
    ArrayList<Driver> drivers = new ArrayList(); 
    drivers.add(a); 

    DriverAdapter driverAdapter = new DriverAdapter(getActivity().getApplicationContext(),R.layout.driver_listview, drivers); 
    listView.setAdapter(driverAdapter); 

Bu ne yapardım, ben bu çevrede Google'dan bazı örnekler üzerinde okumanızı tavsiye ediyorum bir tek kaba örnektir. Mümkünse ListViews yerine RecyclerViews da okuyun. Eğer gerçekten Android (ListView) listeleri kullanma

gibi bazı iyi öğretici kontrol gereken tüm eğer ilk

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html

https://www.bignerdranch.com/blog/recyclerview-part-1-fundamentals-for-listview-experts/

+0

I notifyDataSetChanged() metodu ilave güvenilir ve de i nesne ilave edildikten sonra adaptör ilave ama yine de göstermez. –

1

- Öğretici http://www.vogella.com/tutorials/AndroidListView/article.html

varsayarsak her şey yolunda mı Fragmanınız ve görünür durumda, Bağdaştırıcınıza odaklanalım. DriverAdapter'inizin kendi ArrayList verisine sahip olmasından dolayı, super.add() yönteminin add´s add() yönteminde aranmasının hiçbir anlamı yoktur. Bağdaştırıcının UI'deki içeriği yenilemesi gerektiğini bildirmesi için notifyDataSetChanged() öğesini çağırmanız yeterlidir. Böyle bir şey deneyin .. Benim son cevap yardımcı görünmüyordu

+0

NotifyDataSetChanged() yöntemini eklemeye çalıştım ancak hala çalışmıyor –

İlgili konular