java - Android 中的 for 循环在项目之间创建间隙

标签 java android arrays json for-loop

我在导航 slider 中传递 json,其中项目之间的间隙为 2 个空格。我无法理解为什么会这样。我尝试了多种方法,但都没有成功。

导航.Java

private void navmenu() {
        String menuurl = "http://www.souqalkhaleejia.com/webapis/categories.php";
        Log.i("menuurl", menuurl);
        JsonObjectRequest menuobj = new JsonObjectRequest(Request.Method.POST, menuurl, (String) null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONArray menu1=response.getJSONArray("menu1");
                    for (int i=0;i<menu1.length();i++){
                        JSONObject first=menu1.getJSONObject(i);
                        Data navgadata = new Data();
                        navgadata.setCatergory(first.getString("category"));
                        datalts.add(navgadata);
                        JSONArray item=first.getJSONArray("items");
                        for (int j=0;j<item.length();j++){
                            Data secdata=new Data();
                            JSONObject second=item.getJSONObject(j);
                            secdata.setId(second.getString("id"));
                            secdata.setSubcatergory(second.getString("title"));
                            datalts.add(secdata);
                        }


                    }

                   } catch (JSONException e) {
                    e.printStackTrace();
                }
                listnadapter.notifyDataSetChanged();
            }

        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d("res", "Error: " + error.getMessage());
            }
        });
        AppController.getInstance().addToRequestQueue(menuobj);
    }

这是我的 XML 文件 navigation.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Large Text"
    android:textColor="#fff"
    android:id="@+id/categories" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Medium Text"
    android:textColor="#fff"
    android:id="@+id/subcategories" />

适配器.java

public class Navgation_adapter extends BaseAdapter {
private Context context;
private List<Data> catdata;
private LayoutInflater inflater;
public Navgation_adapter(Context context, List<Data> catdata){
    this.context=context;
    this.catdata=catdata;
}
@Override
public int getCount() {
    return catdata.size();
}

@Override
public Object getItem(int i) {
    return catdata.get(i);
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {

    ViewHolder holder;
    if (inflater == null)
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if(view==null){
        holder=new ViewHolder();
        view=inflater.inflate(R.layout.navigation_list,viewGroup,false);
        holder.categories= (TextView) view.findViewById(R.id.categories);
        holder.subcategories= (TextView) view.findViewById(R.id.subcategories);
        view.setTag(holder);

    }else {
        holder= (ViewHolder) view.getTag();
    }
    Data ndata=catdata.get(i);
    holder.categories.setText(ndata.getCatergory());
    holder.subcategories.setText(ndata.getSubcatergory());

    return view;
}
static class ViewHolder{
    TextView categories,subcategories;
}

这是我如何查看的图像

enter image description here

最佳答案

您对类别和子类别使用相同的Data 类。当 JSON 数据是类别时,您可以在 Data 对象上设置类别 String,而不是子类别 String。当数据是子类别时,反之亦然。您未设置的 String 仍为空,并且在 TextView 上设置空文本会将其留空。因此,当列表项表示类别时,顶部 TextView 显示类别名称,但底部 TextView 为空白。下一个项目将是一个子类别,出于同样的原因,顶部的 TextView 将为空白。两个相邻的空白 TextView 在类别与其第一个子类别之间留下了很大的间隙。以下子类别项目中的空白类别 TextView 在这些项目之间留下较小的间隙。

如果您想尽可能坚持当前的设置,一种解决方案是根据数据类型切换 TextView 的可见性属性,我们可以通过检查空 Data 对象成员来确定数据类型。

public View getView(int i, View view, ViewGroup viewGroup) {
    ...     
    Data ndata = catdata.get(i);

    holder.subcategories.setText(ndata.getSubcatergory());
    holder.categories.setText(ndata.getCatergory());

    if(ndata.getCatergory() == null) {
        holder.categories.setVisibility(View.GONE);
        holder.subcategories.setVisibility(View.VISIBLE);       
    }
    else {
        holder.categories.setVisibility(View.VISIBLE);
        holder.subcategories.setVisibility(View.GONE);      
    }

    return view;
}

关于java - Android 中的 for 循环在项目之间创建间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33729649/

相关文章:

java - 实现双向链表的删除方法

java - 即使 java 中对象的状态相同,也等于给出 false

android - MediaPlayer OnCompletionListener导致错误

arrays - 为什么在 Optional Array 上的映射不同于 non-optionalArray

Python:For 循环列表给出 IndexError

java - 从字节数组中删除多余的 "empty"字符并转换为字符串

java - 使用 bouncyCaSTLe.SecurityException 打包在独特的 jar 中

java - 文件处理java

android - 多语言数据库问题

java - 在Webview中调用onBackPressed方法时,它会停止缓存