1

Я создал класс PickedDropsAdapter, который расширяет ArrayAdapter для ListView, в котором перечислены объекты из спискаGetView на расширенном ArrayAdapter всегда имеет положение 0

Добавление и удаление в основном работает нормально, за исключением того положения в GetView всегда 0, и я просто не могу понять, почему.

Я нашел несколько похожий вопрос, но ни один из ответов не было на самом деле помогает

Может быть важно отметить, что ListView в виде фрагмента, который снова находится в ViewPager с двумя страницами.

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); 

} 
} 

Часть PickedDropsFrag (фрагмента, который содержит 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(); 
} 

Это должно быть все важное, я надеюсь, что ничего не забыл.

ответ

2

Update следующих методов в вашем адаптере:

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; 
    } 
} 
+0

Потрясающее, что на самом деле сделал трюк, спасибо много! – alektron

Смежные вопросы