사용자 지정 어댑터가있는 ListView가 있는데이 ListView의 개별 행보기에 액세스해야합니다. getChildAt()를 사용하여이 작업을 수행하려하지만 null을 반환합니다.사용자 지정 어댑터가있는 Android ListView - getChildAt()가 null을 반환합니다.
public class MyListAdapter extends BaseAdapter {
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_row_layout, parent, false);
}
...
}
나는 목록을 작성하고 ListView를 위해 설정 : 이제
List <String> myList = new ArrayList<String>();
myList.add("entry 1");
myList.add("entry 2");
myList.add("entry 3");
MyListAdapter myListAdapter = new MyListAdapter(getApplicationContext(), myList);
myListView.setAdapter(myListAdapter);
내가
myListView = (ListView) findViewById (R.id.listViewLayout);
이 사용자 정의 어댑터는 다음과 같습니다
내 ListView에의 개별 행에 대한보기에 액세스하려고합니다.View v = myListView.getChildAt(myListView.getFirstVisiblePosition());
이 v는 null입니다. 또한 myListView.getChildCount()
은 항상 null을 반환합니다.
무엇이 누락 되었습니까? getView()
에 convertView
을 parent
에 추가해야하나요? 잘못된 매개 변수를 inflate
에 전달하고 있습니까?
나는 이것을 알아 내기 위해 많은 어려움을 겪었습니다. 제발 도와주세요! 나는 MyListAdapter 클래스를 게시하고있다 :
편집이 onCreate()
이 모든 일을하는지 모든 가능성에
public class MyListAdapter extends BaseAdapter {
private Context context;
private List<String> myList;
public MyListAdapter(Context c, List<String> m) {
context = c;
myList = m;
}
@Override
public int getCount() {
return myList.size();
}
@Override
public Object getItem(int position) {
return myList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_row_layout, parent, false);
}
TextView text = (TextView) convertView.findViewById(R.id.itemText);
text.setText(myList.get(pos));
// Set the onClick Listener on this button
Button rowButton = (Button) convertView.findViewById(R.id.itemButton);
//commenting next two lines makes the list row clickable
rowButton.setFocusableInTouchMode(false);
rowButton.setFocusable(false);
rowButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(context, myList.get(pos), Toast.LENGTH_SHORT).show();
}
});
convertView.setTag(pos);
return convertView;
}
}
getChildAt의 구현은 어떻게됩니까? –
나머지 MyListAdapter 클래스를 게시 할 수 있습니까? 특히, 생성자, getView 전체 본문 및 getCount() 구현? – Chris