首页 > 解决方案 > Android textview setVisibilty GONE 无法唤醒

问题描述

我在 recyclerview 布局中的 textview 有问题。如果我调用 setVisibility GONE 方法,它没有效果,textview 继续可见叠加在 recyclerview 上,尽管定义的布局不允许它:

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

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="#DDDDDD"
    android:dividerHeight="1px"
    android:focusableInTouchMode="true" />

<TextView
    android:id="@+id/tv_empty"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:textSize="20sp"
    android:textColor="#999999"
    android:text="@string/label_object_empty" /></LinearLayout>

我执行操作的代码是:

    recyclerView = getView().findViewById(R.id.list);
    RecyclerView.LayoutManager manager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(manager);

    OggettoAdapter adapter = new OggettoAdapter(getContext(), oggetti, mapQuartieri, mapDomini,     getOnActionActivity());
    recyclerView.setAdapter(adapter);

    if (adapter.getItemCount() > 0) {
        recyclerView.setVisibility(View.VISIBLE);
        tvEmpty.setVisibility(View.GONE);
    } else {
        recyclerView.setVisibility(View.GONE);
        tvEmpty.setVisibility(View.VISIBLE);

    }

在此处输入图像描述

如果有用,代码在 onPostExecute 中执行,并且在主片段中

我尝试了各种方法,包括布局中的文本视图,但是没有,没有任何效果。我不知道该怎么做。谢谢

创建视图:

 public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {

    View root = inflater.inflate(R.layout.fragment_oggetti, container, false);

    //ltContainer = root.findViewById(R.id.lt_container);

    tvEmpty = root.findViewById(R.id.tv_empty);
    tvEmpty.setVisibility(View.GONE);

    recyclerView = root.findViewById(R.id.list);
    RecyclerView.LayoutManager manager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(manager);


    getOnActionActivity().setOnClickListenerMap(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (oggetti != null && !oggetti.isEmpty()) {
                getOnActionActivity().openMap(oggetti, filter.getRaggio(), "POINT (40.83035550115621 14.244734405325753)");
            }
        }
    });

    getOnActionActivity().setOnClickListenerFilter(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            getOnActionActivity().openFilter();
        }
    });

    getOnActionActivity().viewIconFilter(true);
    getOnActionActivity().viewIconMap(true);

    return root;
}

更新适配器:

adapter = new OggettoAdapter(getContext(), oggetti, mapQuartieri, mapDomini, 

getOnActionActivity()); recyclerView.setAdapter(适配器);

公共类 OggettoAdapter 扩展 RecyclerView.Adapter<OggettoAdapter.ViewHolderObjects> {

private Context context;
private List<Gs001Oggetto> objects;
private Map<Integer, String> quartieri;
private Map<Integer, String> domini;
private String apiKey;
private OnActionActivity onActionActivity;

public OggettoAdapter(Context context, List<Gs001Oggetto> objects, Map<Integer, String> quartieri, Map<Integer, String> domini, OnActionActivity onActionActivity) {
    this.context = context;
    this.objects = objects;
    this.quartieri = quartieri;
    this.domini = domini;
    this.apiKey = context.getString(R.string.map_api_key);
    this.onActionActivity = onActionActivity;
}

@NonNull
@Override
public ViewHolderObjects onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_object, parent, false);
    return new ViewHolderObjects(itemView, onActionActivity);
}

@Override
public void onBindViewHolder(@NonNull ViewHolderObjects holder, int position) {
    Gs001Oggetto object = objects.get(position);
    holder.oggetto = object;
    String quartiere = quartieri.get(new Integer((int) object.getQuartiere()));
    if (quartiere != null) {
        holder.tvQurtiere.setVisibility(View.VISIBLE);
        holder.tvQurtiere.setText(quartiere);
    } else {
        holder.tvQurtiere.setVisibility(View.GONE);
    }

    String descrizioneDom = domini.get(new Integer(object.getDominio()));

    if (descrizioneDom != null) {
        holder.tvDominio.setText(descrizioneDom);
    }

    final String[] coordinate = GeoUtil.convertWktToArray(object.getGeometriaWKT());
    if (coordinate != null && coordinate.length == 2) {
        String sw_url = GeoUtil.createUrlStreeView(coordinate[0] + "," + coordinate[1], 600, 600, apiKey);
        Glide.with(context).load(sw_url).placeholder(R.drawable.thumbnail).into(holder.ivPhoto);
    }

    holder.tvId.setText("" + object.getId());

    String address = object.getToponimo() != null ? object.getToponimo() + " " + object.getStrada() : object.getStrada();
    holder.tvAddress.setText(address);
    holder.layout.setOnClickListener(holder);

}

@Override
public int getItemCount() {
    return objects.size();
}

……

标签: androidtextview

解决方案


  1. Ctrl++搜索“Nessun Shiftoggetto Ftrovato”和“label_object_empty”以检查另一个视图是否正在显示该消息或仅显示该消息tvEmpty
  2. 如果你保证只tvEmpty显示消息。按Ctrl+ Shift+并一一R替换。每次替换一个,重新运行您的应用程序并检查文本是否可见。如果在更改时,文本会按照您的预期消失,然后仔细检查您的代码,检查条件语句以了解您的程序运行到该代码行的原因。tvEmpty.setVisibility(VISIBLE)tvEmpty.setVisibility(GONE)

就您而言,我认为您已将文本“Nessun oggetto trovato”设置为其他视图。


推荐阅读