gpt4 book ai didi

android - 徽章 View : ParentView is needed

转载 作者:行者123 更新时间:2023-11-30 00:19:52 25 4
gpt4 key购买 nike

我为 ListView 创建了一个自定义适配器,我想为一行显示一个徽章。我没有收到任何错误,但徽章也没有出现。当我查看 logcat 时,有一条消息“BadgeView:需要 ParentView”。但是我已经提供了一个。

import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.jauker.widget.BadgeView;
import java.util.ArrayList;
import java.util.List;

public class AdminViewAdapter extends BaseAdapter {
List<String> result = new ArrayList<String>();
List<Integer> resnum = new ArrayList<Integer>();
public static Context context;
private static LayoutInflater inflater=null;
public AdminViewAdapter(Context mainActivity, List<String> ADMINFUNCTIONS, List<Integer> NUMBERS) {
// TODO Auto-generated constructor stub
result=ADMINFUNCTIONS;
resnum = NUMBERS;
context=mainActivity;
inflater = ( LayoutInflater )context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return result.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

public static class Holder
{
TextView os_text;
BadgeView badgeView;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v = convertView;
Holder holder =new Holder();
if(v == null) {
v = inflater.inflate(R.layout.list_functions, null);
holder.os_text = (TextView) v.findViewById(R.id.receptionistfunctions);
if (result.toArray()[position].toString().contains("ACCOUNT")) {
holder.os_text.setTextAlignment(v.TEXT_ALIGNMENT_TEXT_START);
holder.os_text.setText(result.toArray()[position].toString());
holder.badgeView = new BadgeView(context);
holder.badgeView.setTargetView(holder.os_text);
holder.badgeView.setBadgeGravity(Gravity.BOTTOM);
holder.badgeView.setBadgeMargin(0, 0, 0, 0);
holder.badgeView.setBadgeCount(22);
}
else if (result.toArray()[position].toString().contains("LEAVE")) {
/* holder.os_text.setTextAlignment(v.TEXT_ALIGNMENT_TEXT_START);
holder.os_text.setText(result.toArray()[position].toString());
BadgeView badge = new BadgeView(context);
badge.setTag(target);
badge.setText(resnum.toArray()[1].toString());
badge.show();*/
}
else {
holder.os_text.setText(result.toArray()[position].toString());
}
v.setTag(holder);
}
else {
holder = (AdminViewAdapter.Holder)convertView.getTag();
}

return v;
}}

没有其他错误。我试过为徽章使用另一个 View 变量。

最佳答案

您没有将您的 BadgeView 添加到任何 View 组,因此您的 BadgeView 没有父 View 。这就是您看到该消息的原因。 View 应该有父 View !

我认为您可以通过使用 ViewGroup#addView() 以编程方式将 BadgeView 添加到您的适配器布局来解决此问题方法,像这样 ((ViewGroup) v).addView(holder.badgeView)。或者甚至更好,修改您的适配器布局以在其中包含一个 BadgeView

编辑:
您可以像这样修改您的 getView() 方法:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
Holder holder =new Holder();
if(v == null) {
v = inflater.inflate(R.layout.list_functions, null);
// ...
holder.badgeView = new BadgeView(context);
holder.badgeView.setTargetView(holder.os_text);
holder.badgeView.setBadgeGravity(Gravity.BOTTOM);
holder.badgeView.setBadgeMargin(0, 0, 0, 0);
holder.badgeView.setBadgeCount(22);
// Add this line
((ViewGroup) v).addView(holder.badgeView);
}
// ...
}}

关于android - 徽章 View : ParentView is needed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46516334/

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