alektron
alektron

Reputation: 87

getView on extended ArrayAdapter always has position 0

I have created a class PickedDropsAdapter that extends ArrayAdapter for a listView that lists Objects from a List

Adding and removing basically works fine except that position in getView is always 0 and I just can't figure out, why.

I found a few similar question but none of the answers was really helping

Maybe important to mention is that listView is in a Fragment which again is in a ViewPager with two pages.

PickedDropsAdapter.java

public class PickedDropsAdapter extends ArrayAdapter {

private LayoutInflater myInflater;
private List<PickedDrop> pickedList;

public PickedDropsAdapter(Context context, int resource, List objects){
    super(context, resource, objects);
    myInflater = LayoutInflater.from(context);
    setData(objects);
}

public void setData(List list){
    this.pickedList = list;
}

@Override
public int getPosition(Object item) {
    return super.getPosition(item);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    TextView profileName;
    if (convertView == null) {
        convertView = myInflater.inflate(R.layout.picked_drop, null);
        profileName = (TextView)convertView.findViewById(R.id.profileName);
        Log.i("TAG", "Name in adapter: " + pickedList.get(position).name);
        Log.i("TAG", "Postion in adapter: " + position);
        profileName.setText(pickedList.get(position).name);
        pickedList.get(position).makeActive(convertView);

    }
    return convertView;
}
}

PickedDrop

public class PickedDrop extends Fragment {

int id, listLoc;
String name;
RelativeLayout pickedLayout;
PickedDropsFrag parentFrag = null;

public static PickedDrop newInstance(String nameParam, int idParam) {
    final PickedDrop fragment = new PickedDrop();
    fragment.name = nameParam;
    Log.i("TAG", "Drop name: " + fragment.name);
    fragment.id = idParam;
    return fragment;
}

public PickedDrop() {
    // Required empty public constructor
}

public void openDrop(){
    MainActivity mainActivity = (MainActivity)parentFrag.getActivity();
    mainActivity.openDrop(this);
}

public void openDrop(int i){
    listLoc = i;
    MainActivity mainActivity = (MainActivity)parentFrag.getActivity();
    mainActivity.openDrop(this);
}

public void makeActive(View convertView){
    pickedLayout = (RelativeLayout)convertView.findViewById(R.id.pickedLayout);

}
}

Part of PickedDropsFrag (The fragment that contains the listView)

public class PickedDropsFrag extends Fragment {
private OnFragmentInteractionListener mListener;
PickedDropsAdapter pickedAdapter;
ListView pickedListView;
List<PickedDrop> pickedList;


public PickedDropsFrag() {
    // Required empty public constructor
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    pickedListView = (ListView)getView().findViewById(R.id.pickedListView);
    pickedListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            PickedDrop drop = (PickedDrop) adapterView.getItemAtPosition(i);
            drop.openDrop(i);
        }
    });

    pickedList = new ArrayList<>();

    pickedAdapter = new PickedDropsAdapter(
            getActivity(),
            R.layout.picked_drop,
            pickedList
    );

    pickedListView.setAdapter(pickedAdapter);
}

public void addToPicked(PickedDrop drop){
    drop.parentFrag = this;
    //pickedList.add(drop);
    pickedAdapter.add(drop);
    drop.listLoc = pickedList.size() - 1;

    //pickedAdapter.notifyDataSetChanged();

    drop.openDrop();
}

That should be everything important, I hope I didn't forget anything.

Upvotes: 1

Views: 2001

Answers (1)

guipivoto
guipivoto

Reputation: 18687

Update following methods in your Adapter:

public class PickedDropsAdapter extends ArrayAdapter {
    @Override
    public int getCount() {
        return pickedList.size();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView profileName;
        if (convertView == null) {
            convertView = myInflater.inflate(R.layout.picked_drop, null);
        }
        profileName = (TextView)convertView.findViewById(R.id.profileName);
        Log.i("TAG", "Name in adapter: " + pickedList.get(position).name);
        Log.i("TAG", "Postion in adapter: " + position);
        profileName.setText(pickedList.get(position).name);
        pickedList.get(position).makeActive(convertView);

        return convertView;
    }
}

Upvotes: 1

Related Questions