当前位置: 首页 > 知识库问答 >
问题:

Android setVisibility视图。看不见,看不见。你不工作了

易昌翰
2023-03-14

我想弄清楚为什么视图。无形和视图。在我的Android应用程序中消失了。

我相信我的逻辑是正确的=空值,但可能不是?

下面是我的语法。我的目标是,如果他们的信息我想向用户显示这些信息。如果facebook、twitter、yelp等。。。如果没有显示信息,那么我不想给我的用户显示一个大的空白(这不好看)。我的问题是,我做错了什么,我怎样才能解决这个问题?我的语法如下。谢谢

public View getView(int position, View convertView, ViewGroup parent) {

    allTheshipInfo infoHolder;

    if(convertView == null){
        convertView = inflater.inflate(R.layout.show_dealership_information, parent, false);

        infoHolder = new allTheshipInfo();
        infoHolder.facebook = (TextView) convertView.findViewById(R.id.theFacebook);
        infoHolder.twitter = (TextView) convertView.findViewById(R.id.theTwitter);  
        infoHolder.youtube = (TextView) convertView.findViewById(R.id.theYoutube);
        infoHolder.googlePlus = (TextView) convertView.findViewById(R.id.theGoogle_plus);
        infoHolder.yelp = (TextView) convertView.findViewById(R.id.theYelp);

        convertView.setTag(infoHolder);

    } else {
        infoHolder = (allTheDealershipInfo) convertView.getTag();

    }

    try {
        JSONObject jsonObject = this.dataArray.getJSONObject(position);

        infoHolder.dealerships.setText(jsonObject.getString("business"));   
        infoHolder.state.setText(jsonObject.getString("state"));
        infoHolder.city.setText(jsonObject.getString("city"));
        infoHolder.phone.setText(jsonObject.getString("phone"));
        infoHolder.address.setText(jsonObject.getString("address"));
        infoHolder.zip.setText(jsonObject.getString("zip"));
        infoHolder.email.setText(jsonObject.getString("email"));
        infoHolder.website.setText(jsonObject.getString("website"));
        infoHolder.facebook.setText(jsonObject.getString("facebook"));
        infoHolder.twitter.setText(jsonObject.getString("twitter"));

        infoHolder.youtube.setText(jsonObject.getString("youtube"));
        infoHolder.googlePlus.setText(jsonObject.getString("google_plus"));
        infoHolder.yelp.setText(jsonObject.getString("yelp"));


                    if(facebook.isEmpty()){
            infoHolder.facebook.setVisibility(View.GONE);
            Toast.makeText(activity, "Facebook Gone", Toast.LENGTH_SHORT).show();
        } else {
            infoHolder.facebook.setText(facebook);
            infoHolder.facebook.setVisibility(View.VISIBLE);
            Toast.makeText(activity, "Facebook Here", Toast.LENGTH_SHORT).show();
        }

        if(twitter.isEmpty()){
            infoHolder.twitter.setVisibility(View.GONE);
            Toast.makeText(activity, "Twitter Gone", Toast.LENGTH_SHORT).show();
        } else {
            infoHolder.twitter.setText(twitter);
            infoHolder.twitter.setVisibility(View.VISIBLE);
            Toast.makeText(activity, "Twitter Here", Toast.LENGTH_SHORT).show();
        }

        if(youtube.isEmpty()){
            infoHolder.youtube.setVisibility(View.GONE);
            Toast.makeText(activity, "YouTube Gone", Toast.LENGTH_SHORT).show();
        } else {
            infoHolder.youtube.setText(youtube);
            infoHolder.youtube.setVisibility(View.VISIBLE);
            Toast.makeText(activity, "YouTube Here", Toast.LENGTH_SHORT).show();
        }

        if(googlePlus.isEmpty()){
            infoHolder.googlePlus.setVisibility(View.GONE);
            Toast.makeText(activity, "GooglePlus Gone", Toast.LENGTH_SHORT).show();
        } else {
            infoHolder.googlePlus.setText(googlePlus);
            infoHolder.googlePlus.setVisibility(View.VISIBLE);
            Toast.makeText(activity, "GooglePlus Here", Toast.LENGTH_SHORT).show();
        }

        if(yelp.isEmpty()){
            infoHolder.yelp.setVisibility(View.GONE);
            Toast.makeText(activity, "Yelp Gone", Toast.LENGTH_SHORT).show();
        } else {
            infoHolder.yelp.setText(yelp);
            infoHolder.yelp.setVisibility(View.VISIBLE);
            Toast.makeText(activity, "GooglePlus Here", Toast.LENGTH_SHORT).show();
        }

        Toast.makeText(activity, "Call " + jsonObject.getString("business"), Toast.LENGTH_SHORT).show();
        Toast.makeText(activity, "# " + jsonObject.getString("phone"), Toast.LENGTH_SHORT).show();  

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

    return convertView;
}

我的XML

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="40dp"
    android:orientation="horizontal">

<TableRow
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        android:text="@string/facebook"
        android:autoLink="web"
        android:id="@+id/theFacebook"
        android:layout_column="0"
        android:layout_weight="1" />

</TableRow>
<TableRow
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        android:text="@string/twitter"
        android:autoLink="web"
        android:id="@+id/theTwitter"
        android:layout_column="0"
        android:layout_weight="1" />

</TableRow>
<TableRow
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        android:text="@string/google_plus"
        android:autoLink="web"
        android:id="@+id/theGoogle_plus"
        android:layout_column="0"
        android:layout_weight="1" />

</TableRow>
<TableRow
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        android:text="@string/yelp"
        android:autoLink="web"
        android:id="@+id/theYelp"
        android:layout_column="0"
        android:layout_weight="1" />

</TableRow>
    <TableRow
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        android:text="@string/youtube"
        android:autoLink="web"
        android:id="@+id/theYoutube"
        android:layout_column="0"
        android:layout_weight="1" />

</TableRow>      

</TableLayout>

共有2个答案

韩夕
2023-03-14

我认为你必须做这样的事情(只是facebook的例子):

public View getView(int position, View convertView, ViewGroup parent) {

    allTheshipInfo infoHolder;

    if(convertView == null){
        convertView = inflater.inflate(R.layout.show_dealership_information, parent, false);

        infoHolder = new allTheshipInfo();
        infoHolder.facebook = (TextView) convertView.findViewById(R.id.theFacebook);
        convertView.setTag(infoHolder);

    } else infoHolder = (allTheDealershipInfo) convertView.getTag();

    try {

        JSONObject jsonObject = this.dataArray.getJSONObject(position);
        if (jsonObject.getString("facebook") == null)
            infoHolder.facebook.setVisibility(View.GONE);

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

    return convertView;
}
汪凌
2023-03-14

我认为您正在尝试根据相关的json数据是否可用来显示/隐藏文本视图。至于您当前的代码:

infoHolder.yelp = (TextView) convertView.findViewById(R.id.theYelp);

if(infoHolder.yelp != null){
    ...
}

您声明的if语句只是检查文本视图是否为空,它永远不会为空,因为它在开始时分配了一个文本视图。在决定是否显示/隐藏文本视图之前,您应该首先确定json数据是否存在。

例如:

JSONObject jsonObject = this.dataArray.getJSONObject(position);
String yelpStr = jsonObject.optString("yelp");
if(yelpStr != null){
    infoHolder.yelp.setText(yelpStr);
    infoHolder.yelp.setVisibility(View.VISIBLE);
    Toast.makeText(activity, "Yelp Here", Toast.LENGTH_LONG).show();
}else{
    infoHolder.yelp.setVisibility(View.GONE);
    Toast.makeText(activity, "Yelp Gone", Toast.LENGTH_LONG).show();
}

另外,我相信你错放了一个右大括号,它应该在infoHolder使用标签检索之后:

if(convertView == null){
    ...
}else{
    infoHolder = (allTheDealershipInfo) convertView.getTag();
}

确保结束if/else语句以正确分配infoHolder,这样文本视图将按预期用于代码的其余部分。

 类似资料:
  • 对于视图可见性状态,和之间的区别是什么?

  • 我正在尝试实现新的不可见的reCaptcha,但它不起作用。 首先,事件困难我已经用“隐形”选项创建了一个新的键,在我的应用程序中更改了键,当我在控制台中查看时,我可以看到这个请求: 根据医生的说法是对的... 第二,我选择将验证码放在一个div中(根据文档这是可以的): 这是一个验证码解决方案,但不是不可见的解决方案,因为它仍然显示框。我知道我也必须使用execute函数,但由于我仍然看到框,我

  • 在此处输入图像描述 grafico(){const bgColor={id:'bgColor', beforeDraw:(图表,步骤,选项)= }

  • 我正在以编程方式将视图添加到: 然而,它们都不知何故是看不见的。返回所有count。每个添加的视图的还返回。 即使我添加新的视图没有拖动,一切都变得可见。

  • 因此,我无法访问代码中需要的信息。到底是怎么回事?开发人员是否故意隐藏了该元素的子元素?你能给出一个让孩子们对我的代码可见的方法吗?谢谢你。

  • 我使用的是一个启用文档可见性的复合模板。 可以通过参数将签名者从没有标签的文档中正确地排除,也可以显式地将签名者从没有标签的文档中排除。 我的问题是:发件人(我)无法查看信封中发件人不是收件人的文档之一。根据文档: 部分请求,包括有问题的文档。您可以看到发件人如何不是此文档的收件人。