Android 为具有一些空值的列表生成适配器
我得到了一个列表,我想使用自己的自定义适配器在列表视图中显示该列表所以这个列表中有一些空值,还有一些“重要的”非空值 可能是这样的: (N表示空) (D代表一些有价值的数据) myList: [N,N,D,D,N,N,D,N,D,N,D,N,N]例如。 所以我得到了适配器,但我无法处理列表中的空值 这是我的适配器: 公共类ItemAdapter扩展了ArrayAdapter{Android 为具有一些空值的列表生成适配器,android,android-adapter,Android,Android Adapter,我得到了一个列表,我想使用自己的自定义适配器在列表视图中显示该列表所以这个列表中有一些空值,还有一些“重要的”非空值 可能是这样的: (N表示空) (D代表一些有价值的数据) myList: [N,N,D,D,N,N,D,N,D,N,D,N,N]例如。 所以我得到了适配器,但我无法处理列表中的空值 这是我的适配器: 公共类ItemAdapter扩展了ArrayAdapter{ List<Item> itemList; private Activity act; boolean sel
List<Item> itemList;
private Activity act;
boolean selling;
public ItemAdapter(Activity act, List<Item> itemList, boolean selling) {
super(act, R.layout.item_view_layout, itemList);
this.itemList = itemList;
this.act = act;
this.selling = selling;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
final Item itemManipulated = itemList.get(position);
if (convertView == null) {
convertView = new ItemInShopView(act, itemManipulated);
holder = new ViewHolder();
holder.convertView = convertView;
holder.itemNameTextView = (TextView) ((ItemView) convertView).getItemNameTextView();
holder.iconImageView = (ImageView) ((ItemView) convertView).getItemIconImageView();
holder.coinView = (CoinView) ((ItemInShopView) convertView).getCoinView();
holder.coinView.init(act);
holder.itemRarityHidedTextView = (TextView) ((ItemView) convertView).getItemRarityHidedTextView();
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.itemNameTextView.setText(itemManipulated.getName());
holder.iconImageView.setImageResource(itemManipulated.getIcon());
holder.itemRarityHidedTextView.setText(itemManipulated.getRarity());
Colorer.setTextViewColorByItemRarity(holder.itemNameTextView, holder.getRarity(), act);
if (selling) {
holder.coinView.setCoins(itemManipulated.getSellPrice());
} else {
holder.coinView.setCoins(itemManipulated.getPrice());
}
holder.convertView.setOnClickListener(new OnClickListenerWithPreventDoubleTapper(itemManipulated));
holder.convertView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return false;
}
});
return convertView;
}
class OnClickListenerWithPreventDoubleTapper extends OnClickListenerWithPreventDoubleTap {
Item item;
public OnClickListenerWithPreventDoubleTapper(Item item) {
this.item = item;
}
@Override
protected void performAction() {
new ItemDialog(act, item).show();
}
}
static class ViewHolder {
TextView itemRarityHidedTextView;
TextView itemNameTextView;
ImageView iconImageView;
CoinView coinView;
View convertView;
public String getRarity() {
return itemRarityHidedTextView.getText().toString();
}
}
}
列表项列表;
私人活动法;
布尔销售;
公共项目适配器(活动行为、列表项目列表、布尔销售){
超级(act,R.layout.item\u view\u layout,itemList);
this.itemList=itemList;
this.act=act;
这个。销售=销售;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
final Item=itemList.get(位置);
if(convertView==null){
convertView=新项目视图(act,项目视图);
holder=新的ViewHolder();
holder.convertView=convertView;
holder.itemNameTextView=(TextView)((ItemView)convertView.getItemNameTextView();
holder.iconImageView=(ImageView)((ItemView)convertView.getItemIconImageView();
holder.coinView=(coinView)((ItemInShopView)convertView.getCoinView();
holder.coinView.init(法案);
holder.itemRarityHidedTextView=(TextView)((ItemView)convertView.getItemRarityHidedTextView();
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.itemNameTextView.setText(itemOperated.getName());
holder.iconImageView.setImageResource(itemOperated.getIcon());
holder.itemRarityHidedTextView.setText(itemOperated.getRarity());
color.setTextViewColorByItemRarity(holder.itemNameTextView,holder.getRarity(),act);
如果(销售){
holder.coinView.setCoins(itemOperated.getSellPrice());
}否则{
holder.coinView.setCoins(itemOperated.getPrice());
}
holder.convertView.setOnClickListener(新的OnClickListener和PreventDoubleTapper(ItemOperated));
holder.convertView.setOnLongClickListener(新的OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图v){
返回false;
}
});
返回视图;
}
类OnClickListenerWithPreventDoubleTapper扩展了OnClickListenerWithPreventDoubleTap{
项目;
带防喷器的公用onclick监听器(项目){
this.item=项目;
}
@凌驾
受保护的无效性能(){
新建项目对话框(act,item).show();
}
}
静态类视窗夹{
TextView itemRarityHiddetExtView;
TextView项目名称TextView;
图像视图图标视图;
CoinView-CoinView;
视图转换视图;
公共字符串getRarity(){
返回itemRarityHidedTextView.getText().toString();
}
}
}
我如何实现某种方法来获取适配器句柄null值并在那里不显示任何内容,或者显示一个没有任何内容的虚拟布局
我无法创建一个没有空值的新列表并将这些新列表传递给适配器,因为空值在其他视图中具有重要意义
我希望我的问题很清楚。如果可以的话,请帮忙。为什么不呢
if (itemManipulated != null){
holder.itemNameTextView.setText(itemManipulated.getName());
holder.iconImageView.setImageResource(itemManipulated.getIcon());
holder.itemRarityHidedTextView.setText(itemManipulated.getRarity());
Colorer.setTextViewColorByItemRarity(holder.itemNameTextView, holder.getRarity(),act);
if (selling) {
holder.coinView.setCoins(itemManipulated.getSellPrice());
} else {
holder.coinView.setCoins(itemManipulated.getPrice());
}
} else {
holder.itemNameTextView.setText("No Item");
... (whatever default values you like)
}
编辑:
如果你根本不想显示空值,你需要做一些更复杂的事情
在getView中:查找第n条实际数据
getView:
int posInArray = -1;
for (int i =0; i <= position; i++){
posInArray++;
while(itemList.get(posInArray) == null){
posInArray++;
}
}
itemManipulated = itemList.get(posInArray);
...
getCount:
int count = 0;
for(int i = 0; i < itemList.size(); i++){
if (itemList.get(i) != null){
count++;
}
}
return count;
在getCount中:返回实际数据条数
getView:
int posInArray = -1;
for (int i =0; i <= position; i++){
posInArray++;
while(itemList.get(posInArray) == null){
posInArray++;
}
}
itemManipulated = itemList.get(posInArray);
...
getCount:
int count = 0;
for(int i = 0; i < itemList.size(); i++){
if (itemList.get(i) != null){
count++;
}
}
return count;
getView:
int posInArray=-1;
对于(inti=0;我需要忽略空值,就像它们不存在一样。我不需要空值的列表项。