android - 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();
}
……
解决方案
Ctrl
++搜索“NessunShift
oggettoF
trovato”和“label_object_empty”以检查另一个视图是否正在显示该消息或仅显示该消息tvEmpty
。- 如果你保证只
tvEmpty
显示消息。按Ctrl
+Shift
+并一一R
替换。每次替换一个,重新运行您的应用程序并检查文本是否可见。如果在更改时,文本会按照您的预期消失,然后仔细检查您的代码,检查条件语句以了解您的程序运行到该代码行的原因。tvEmpty.setVisibility(VISIBLE)
tvEmpty.setVisibility(GONE)
就您而言,我认为您已将文本“Nessun oggetto trovato”设置为其他视图。
推荐阅读
- python-3.x - 尝试使用 matplotlib 将 y 值添加到我的条形图
- reactjs - 检查用户是否登录 React Js
- bootstrap-native - Bootstrap native:在下拉处理上覆盖 setFocus
- javascript - 如何使用 Web Crypto API SubtleCrypto.deriveKey() 为 PBKDF2 设置外长
- sql-server - SQL - How do I declare a group of people's names to be used in my query?
- signalr - SignalR - 客户端连接的传输方法的可能值
- php - 如何显示一个搜索过滤值的查询表?
- css - 如何计算项目/文件中使用的 CSS 颜色
- php - 将项目 ioncube 9 迁移到 ioncube 10.2
- node.js - 连接两个nodejs REST API服务器的最佳方法