簡體   English   中英

ListFragment適配器的通用Viewholder類型

[英]generic viewholder type for a ListFragment adapter

我希望能夠有一個適用於任何ListFragment的通用適配器,以便可以將其發送給任何類型的Viewholder,並且它將僅加載列表。 到目前為止,這就是我所遇到的錯誤。 我原本只希望為朋友列表提供一個適配器,但現在我希望能夠將其重新用於將來的項目。 我來自c ++背景,因此其中的模板有些不同。 如果你們可以告訴我在實際的ListFragment中要做什么,那將使我度過一年

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import java.util.ArrayList;


public class FriendsAdapter<T> extends ArrayAdapter<T>
{
private ArrayList<T> objects;
private final LayoutInflater inflater;
private int resources;
private T viewHolder;
private int currPosition;

public FriendsAdapter(Context context, ArrayList<T> objects,
                      int resources, AdapterCommand<T> listener, T viewholder)
{
    super(context, R.layout.friends_fragment);
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount()
{
    return objects.size();
}

@Override
public T getItem(int position)
{
    return objects.get(position);
}

@Override
public long getItemId(int position)
{
    return 0;
}
public int getPosition()
{
   return this.currPosition;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    View rowView = convertView;
    T viewHolder;
    currPosition = position;
    if (rowView == null)
    {
          // alternate layouts
        if (position % 2 == 0)
        {
            rowView = inflater.inflate(R.layout.friends_fragment_even, null);
        }
        else
        {
            rowView = inflater.inflate(R.layout.friends_fragment_odd, null);
        }

        rowView = inflater.inflate(resources, parent, false);
        viewHolder = new T();
        rowView.setTag(viewHolder);
    }
    else
    {
        viewHolder = (T) rowView.getTag();
    }

    T object = getItem(position);
    return rowView;
}

/*
public void NewFriend(String name,String status,Drawable img) // for adding a single friend to the list 
{
    Friend newFriend = new Friend(name, status, img);
    if (rowView == null)
    {


    }
}
*/
public void DeletedFriend(String name,String hash) // delete a single friend from the list
{
  // loop through , find name , remove the item from the list

}

}

如此處所述您可以使用GenericViewHolder(在我的應用程序中用於RecyclerAdapter而不是用於ListView的適配器)

這是我的實現

public static class GenericViewHolder extends RecyclerView.ViewHolder {

    private SparseArray<View> holder = new SparseArray<View>();

    public GenericViewHolder(View v) {
        super(v);
        deepScan((ViewGroup)v);
    }

    private void deepScan(ViewGroup v) {
        if (v.getChildCount() == 0) return;
        for(int i=0; i< v.getChildCount(); ++i) {
            View nextChild = v.getChildAt(i);
            put(nextChild);
            if (nextChild instanceof ViewGroup) deepScan((ViewGroup)nextChild);
        }
    }

    public <T extends View> T get(Integer id) {
        return (T) holder.get(id);
    }

    public void put(View view) { put(view, view.getId()); }

    public void put(View view, Integer id) {
        if (id == -1) return;  // Mean that hasn't id
        holder.put(id, view);
    }

    public void putViewFromParent(View parent, Integer id) {
        View view = parent.findViewById(id);
        put(view, id);
    }

    public void clear() {
        holder.clear();
    }

    public TextView getAsTextView(int id) { return (TextView) holder.get(id); }
    public ImageView getAsImageView(int id) { return (ImageView) holder.get(id); }
    public EditText getAsEditText(int id) { return (EditText) holder.get(id); }
    public Button getAsButton(int id) { return (Button) holder.get(id); }
    public Spinner getAsSpinner(int id) { return (Spinner) holder.get(id); }
    public ListView getAsListView(int id) { return (ListView) holder.get(id); }

    // ... add more getter or use the generic form
    //    Type x = holder.<Type>get(id);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM