Java Listview自定义适配器getView编号有限
这是我的android显示器的输出。实际上,我在listview中添加了21项,但只输出了9项。我没有对它的arrayadapter编号设置任何限制Java Listview自定义适配器getView编号有限,java,android,listview,android-listview,Java,Android,Listview,Android Listview,这是我的android显示器的输出。实际上,我在listview中添加了21项,但只输出了9项。我没有对它的arrayadapter编号设置任何限制 01-05 20:44:23.368 5969-5969/? I/System.out: getView 0 null 01-05 20:44:23.378 5969-5969/? I/System.out: getView 1 null 01-05 20:44:23.388 5969-5969/? I/System.out: getView 2
01-05 20:44:23.368 5969-5969/? I/System.out: getView 0 null
01-05 20:44:23.378 5969-5969/? I/System.out: getView 1 null
01-05 20:44:23.388 5969-5969/? I/System.out: getView 2 null
01-05 20:44:23.398 5969-5969/? I/System.out: getView 3 null
01-05 20:44:23.408 5969-5969/? I/System.out: getView 4 null
01-05 20:44:23.418 5969-5969/? I/System.out: getView 5 null
01-05 20:44:23.438 5969-5969/? I/System.out: getView 6 null
01-05 20:44:23.448 5969-5969/? I/System.out: getView 7 null
01-05 20:44:23.458 5969-5969/? I/System.out: getView 8 null
01-05 20:44:23.488 5969-5969/? I/System.out: getView 0 android.widget.LinearLayout{41bb18f8 V.E..... ......ID 0,0-432,72}
01-05 20:44:23.488 5969-5969/? I/System.out: getView 1 android.widget.LinearLayout{41bb5708 V.E..... ......ID 0,73-432,145}
01-05 20:44:23.488 5969-5969/? I/System.out: getView 2 android.widget.LinearLayout{41bb9318 V.E..... ......ID 0,146-432,218}
01-05 20:44:23.488 5969-5969/? I/System.out: getView 3 android.widget.LinearLayout{41bbcf28 V.E..... ......ID 0,219-432,291}
01-05 20:44:23.488 5969-5969/? I/System.out: getView 4 android.widget.LinearLayout{41bc0b38 V.E..... ......ID 0,292-432,364}
01-05 20:44:23.488 5969-5969/? I/System.out: getView 5 android.widget.LinearLayout{41bc4748 V.E..... ......ID 0,365-432,437}
01-05 20:44:23.488 5969-5969/? I/System.out: getView 6 android.widget.LinearLayout{41bc8358 V.E..... ......ID 0,438-432,510}
01-05 20:44:23.488 5969-5969/? I/System.out: getView 7 android.widget.LinearLayout{41bcbf68 V.E..... ......ID 0,511-432,583}
MyCustomAdapter.java
这是我的自定义适配器类
public class MyCustomAdapter extends BaseAdapter {
public ArrayList<PackingItem> packingItems;
Context context;
LayoutInflater layoutInflater;
int count;
public MyCustomAdapter(Context context, int textViewResourceId,
ArrayList<PackingItem> countryList) {
this.context = context;
this.packingItems = countryList;
this.packingItems.addAll(countryList);
layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
private class ViewHolder {
CheckBox name;
public TextView number_text;
public Button plus;
public Button minus;
}
@Override
public int getCount() {
return packingItems.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
Log.v("ConvertView", String.valueOf(position));
System.out.println("getView " + position + " " + convertView);
if (convertView == null) {
//convertView = vi.inflate(R.layout.item_info, null);
holder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.item_info,parent,false);
holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1);
holder.number_text= (TextView) convertView.findViewById(R.id.number_text);
convertView.setTag(holder);
holder.number_text.setText(String.valueOf(count));
holder.plus = (Button) convertView.findViewById(R.id.plus);
final ViewHolder finalHolder = holder;
holder.plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (count>=0) {
count++;
}
finalHolder.number_text.setText(String.valueOf(count));
}
});
holder.minus = (Button) convertView.findViewById(R.id.minus);
holder.minus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (count > 0) {
count--;
} else {
if (count <= 0) {
count = 0;
}
finalHolder.number_text.setText(" ");
}
finalHolder.number_text.setText(String.valueOf(count));
}
});
holder.name.setOnClickListener( new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v ;
PackingItem packingItem = (PackingItem) cb.getTag();
Toast.makeText(context,
"Clicked on Checkbox: " + cb.getText() +
" is " + cb.isChecked() + " " + packingItem.getNumber(),
Toast.LENGTH_LONG).show();
packingItem.setSelected(cb.isChecked());
packingItem.setNumber(finalHolder.number_text.getText().toString());
}
});
}
else {
holder = (ViewHolder) convertView.getTag();
}
PackingItem packingItem = packingItems.get(position);
holder.name.setText(packingItem.getName());
holder.name.setChecked(packingItem.isSelected());
holder.name.setTag(packingItem);
holder.number_text.setTag(packingItem);
return convertView;
}
公共类MyCustomAdapter扩展了BaseAdapter{
公共ArrayList打包项目;
语境;
LayoutInflater LayoutInflater;
整数计数;
公共MyCustomAdapter(上下文,int textViewResourceId,
ArrayList国家列表){
this.context=上下文;
this.packingItems=国家列表;
此.packingItems.addAll(国家列表);
layoutInflater=(layoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
}
私有类视窗持有者{
复选框名称;
公共文本视图编号\u文本;
公共按钮加;
公共按钮减号;
}
@凌驾
public int getCount(){
返回packingItems.size();
}
@凌驾
公共对象getItem(int位置){
返回位置;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
Log.v(“ConvertView”,String.valueOf(position));
System.out.println(“getView”+位置+“”+转换视图);
if(convertView==null){
//convertView=vi.充气(R.布局.项目信息,空);
holder=新的ViewHolder();
convertView=LayoutFlater.充气(R.layout.item_信息,父项,false);
holder.name=(复选框)convertView.findViewById(R.id.checkBox1);
holder.number\u text=(TextView)convertView.findViewById(R.id.number\u text);
convertView.setTag(支架);
holder.number_text.setText(String.valueOf(count));
holder.plus=(按钮)convertView.findViewById(R.id.plus);
最终视图持有者finalHolder=持有者;
holder.plus.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(计数>=0){
计数++;
}
finalHolder.number_text.setText(String.valueOf(count));
}
});
holder.减号=(按钮)convertView.findViewById(R.id.减号);
holder.减号.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(计数>0){
计数--;
}否则{
如果(count自定义列表适配器的实现不正确
下面是我的custim适配器的一个示例
public class ResultListAdapter extends BaseAdapter{
Context context;
UsersMain values;
LayoutInflater layoutInflater;
public ResultListAdapter(Context context,UsersMain values){
this.context=context;
this.values=values;
layoutInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return values.getNearestUsers().size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if(convertView==null){
viewHolder= new ViewHolder();
convertView=layoutInflater.inflate(R.layout.match_list_item,parent,false);
viewHolder.username=(TextView)convertView.findViewById(R.id.userResquestTv);
convertView.setTag(viewHolder);
}
else {
viewHolder=(ViewHolder)convertView.getTag();
}
viewHolder.username.setText(values.getNearestUsers().get(position).getName());
return convertView;
}
public static class ViewHolder{
public TextView username;
}
}
遵循此操作。希望有帮助。我认为您缺少getCount()方法。重写该方法并返回list.Size()。希望有帮助。但是我没有使用基本适配器,我可以使用Override getCount()吗?是的,如果您正在使用studio,您可以重写方法,按alt+insert并选择generate override methods,然后将看到可用方法的列表。我认为他不需要getCount()对于ArrayAdapter。唯一重要的是适配器的packingItems
必须大于0。我可以知道为什么前9个值将变为null吗?将此值写入构造函数中。packingItems=countryList;并删除此值。packingItems=new ArrayList();this.packingItems.addAll(countryList);仍然没有工作,我已经按照你的代码做了,我已经再次上传了我的代码
public class ResultListAdapter extends BaseAdapter{
Context context;
UsersMain values;
LayoutInflater layoutInflater;
public ResultListAdapter(Context context,UsersMain values){
this.context=context;
this.values=values;
layoutInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return values.getNearestUsers().size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if(convertView==null){
viewHolder= new ViewHolder();
convertView=layoutInflater.inflate(R.layout.match_list_item,parent,false);
viewHolder.username=(TextView)convertView.findViewById(R.id.userResquestTv);
convertView.setTag(viewHolder);
}
else {
viewHolder=(ViewHolder)convertView.getTag();
}
viewHolder.username.setText(values.getNearestUsers().get(position).getName());
return convertView;
}
public static class ViewHolder{
public TextView username;
}
}