gpt4 book ai didi

带有自定义适配器的 Android ListView - getChildAt() 返回 null

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:07 26 4
gpt4 key购买 nike

我有一个带有自定义适配器的 ListView,我需要访问此 ListView 的各个行的 View 。我正在尝试使用 getChildAt() 执行此操作,但它返回 null。

这是我的 ListView :

myListView = (ListView) findViewById (R.id.listViewLayout);

这是自定义适配器:

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

现在,我想访问各个行的 View 。

View v = myListView.getChildAt(myListView.getFirstVisiblePosition());

无论如何,这个 v 都是空的。此外,myListView.getChildCount() 始终返回 null。

我错过了什么?我是否需要在 getView() 中将 convertView 添加到 parent?我是否向 inflate 传递了错误的参数?

为了解决这个问题,我费了很大的劲。请帮助我!

编辑:我正在发布 MyListAdapter 类:

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

最佳答案

您很可能在 onCreate() 中执行所有这些操作。任何与 View 相关的方法都将返回 null(或空),因为列表尚未呈现。您需要 subview 做什么?

关于带有自定义适配器的 Android ListView - getChildAt() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8234243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com