Android listview sectionHeader:在单个文本视图中显示相关类别项目
我正在开发一个应用程序,在这个应用程序中,我得到了如下的JSON响应,服务的类别将显示在列表视图中,类别作为标题,服务作为行项目。目前其工作正常,但现在需要在单独的行/单独的项中显示行项目,而不是用逗号分隔 JSONAndroid listview sectionHeader:在单个文本视图中显示相关类别项目,android,listview,Android,Listview,我正在开发一个应用程序,在这个应用程序中,我得到了如下的JSON响应,服务的类别将显示在列表视图中,类别作为标题,服务作为行项目。目前其工作正常,但现在需要在单独的行/单独的项中显示行项目,而不是用逗号分隔 JSON [ { categoryId: 1 categoryName: "Automobile" serviceName: "Buy Sell" serviceId: 3 } { categoryId: 1 categoryName: "Automobile" serviceName:
[
{
categoryId: 1
categoryName: "Automobile"
serviceName: "Buy Sell"
serviceId: 3
}
{
categoryId: 1
categoryName: "Automobile"
serviceName: "Wash"
serviceId: 5
}
{
categoryId: 1
categoryName: "Automobile"
serviceName: "Spare Parts"
serviceId: 2
}
{
categoryId: 3
categoryName: "Education"
serviceName: "Teaching"
serviceId: 1
}
{
categoryId: 7
categoryName: "Food"
serviceName: "Restaurant"
serviceId: 5
}
]
现在我想展示这些
即单个项/文本视图中的服务,以逗号分隔。目前,我对行项目使用单个文本视图。下面是我的自定义适配器代码
class CustomAdapter extends BaseAdapter {
private static final int TYPE_ITEM = 0;
private static final int TYPE_SEPARATOR = 1;
LinearLayout linearLayout;
private ArrayList<String> mData = new ArrayList<String>();
private TreeSet<Integer> sectionHeader = new TreeSet<Integer>();
private LayoutInflater mInflater;
public CustomAdapter(Context context) {
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addItem(final String item) {
mData.add(item);
notifyDataSetChanged();
}
public void addSectionHeaderItem(final String item) {
mData.add(item);
sectionHeader.add(mData.size() - 1);
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
return sectionHeader.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public String getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
int rowType = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
switch (rowType) {
case TYPE_ITEM:
convertView = mInflater.inflate(R.layout.snippet_item1, null);
linearLayout = (LinearLayout) convertView.findViewById(R.id.parent);
holder.textView = (TextView) convertView.findViewById(R.id.text);
break;
case TYPE_SEPARATOR:
convertView = mInflater.inflate(R.layout.snippet_item2, null);
holder.textView = (TextView) convertView.findViewById(R.id.textSeparator);
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
switch (rowType) {
case TYPE_ITEM:
holder.textView.setText(mData.get(position));
break;
case TYPE_SEPARATOR:
holder.textView.setText(mData.get(position));
break;
}
return convertView;
}
public static class ViewHolder {
public TextView textView;
}
}
class CustomAdapter扩展了BaseAdapter{
私有静态最终整数类型\u项=0;
私有静态final int TYPE_SEPARATOR=1;
线性布局线性布局;
private ArrayList mData=new ArrayList();
私有树集sectionHeader=新树集();
私人停车场;
公共CustomAdapter(上下文){
mInflater=(LayoutInflater)上下文
.getSystemService(上下文布局\充气机\服务);
}
公共无效附加项(最终字符串项){
mData.add(项目);
notifyDataSetChanged();
}
公共void addSectionHeaderItem(最终字符串项){
mData.add(项目);
sectionHeader.add(mData.size()-1);
notifyDataSetChanged();
}
@凌驾
public int getItemViewType(int位置){
返回段标题。包含(位置)?类型分隔符:类型项目;
}
@凌驾
public int getViewTypeCount(){
返回2;
}
@凌驾
public int getCount(){
返回mData.size();
}
@凌驾
公共字符串getItem(int位置){
返回mData.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
int rowType=getItemViewType(位置);
if(convertView==null){
holder=新的ViewHolder();
开关(行类型){
案例类型\u项目:
convertView=mInflater.inflate(R.layout.snippet_item1,null);
linearLayout=(linearLayout)convertView.findViewById(R.id.parent);
holder.textView=(textView)convertView.findViewById(R.id.text);
打破
箱型分离器:
convertView=mInflater.inflate(R.layout.snippet_item2,null);
holder.textView=(textView)convertView.findViewById(R.id.textSeparator);
打破
}
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
开关(行类型){
案例类型\u项目:
holder.textView.setText(mData.get(position));
打破
箱型分离器:
holder.textView.setText(mData.get(position));
打破
}
返回视图;
}
公共静态类视图持有者{
公共文本视图文本视图;
}
}
由于getView()方法的行为,我真的陷入了困境,请告诉我如何通过使用上述代码实现这一点,我们将非常感谢您的帮助,提前感谢
编辑:
这就是我加载JSON的方式
first_loop = 1;
try {
for (int i = 0; i < ja.length(); i++) {
checkLoop++;
obj = ja.getJSONObject(i);
if (first_loop == 1) {
headerList.add("head");
currentCategory = obj.getString("categoryId");
adpter.addSectionHeaderItem(obj.getString("categoryName"));
adpter.addItem(obj.getString("serviceName"));
headerList.add("detail");
first_loop++;
} else {
if (currentCategory.equals(obj.getString("categoryId"))) {
currentCategory = obj.getString("categoryId");
adpter.addItem(obj.getString("serviceName"));
headerList.add("detail");
} else {
headerList.add("head");
currentCategory = obj.getString("categoryId");
adpter.addSectionHeaderItem(obj.getString("categoryName"));
adpter.addItem(obj.getString("serviceName"));
headerList.add("detail");
}
}
}
if (checkLoop <= 0){
headeradpter.addSectionHeaderItem("");
headeradpter.addItem("N/A");
}
} catch (JSONException e) {
e.printStackTrace();
}
first_loop=1;
试一试{
对于(int i=0;i 如果(checkLoop),我认为您需要更改JSON响应以获得更好的性能。您可以发布代码加载JSON吗?@tangba我正在编辑答案,请参阅。