gpt4 book ai didi

java - 访问 fragment 中的其他 View

转载 作者:行者123 更新时间:2023-12-01 09:00:09 25 4
gpt4 key购买 nike

我在设置 TextView 的可见性时遇到问题。

我有两个 xml。一个用于 fragment 本身,另一个用于 RecyclerView。在fragment_settings.xml 中,我设置RecyclerView。在 settings_list_row.xml 中,我定义了 RecyclerView 行。

当我创建一个新的 RecyclerView 行时,有时会在一行中填充两次 TextView,有时只填充一个。因此,我想将一个 TextView 的可见性设置为在它为空时消失。

因为我的 View 是fragment_settings.xml,所以我无权访问行 View 。有解决办法吗?非常感谢!

fragment_settings.xml:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="de.myfitindustry.myfitindustry.app.SettingsFragment">

<TextView
android:id="@+id/accountTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:textStyle="bold"
android:textColor="@color/colorPrimary"
android:text="@string/accountTitle" />

<android.support.v7.widget.RecyclerView
android:id="@+id/settings_recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" />

</RelativeLayout>

settings_list_row.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:focusable="true"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:clickable="true"
android:background="?android:attr/selectableItemBackground"
android:orientation="vertical">

<TextView
android:id="@+id/settingTitle"
android:textColor="@color/colorBlack"
android:layout_width="match_parent"
android:textSize="16dp"
android:layout_height="wrap_content" />

<TextView
android:id="@+id/settingSubtitle"
android:layout_below="@id/settingTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</RelativeLayout>

fragment onCreateView方法

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

View view = inflater.inflate(R.layout.fragment_settings, container, false);

recyclerView = (RecyclerView) view.findViewById(R.id.settings_recycler_view);
sAdapter = new SettingsAdapter(settingList);
RecyclerView.LayoutManager sLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext()) {
// Disable scrolling in the RecyclerView
@Override
public boolean canScrollVertically() {
return false;
}
};
recyclerView.setLayoutManager(sLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
prepareSettingsData();
recyclerView.setAdapter(sAdapter);


// HERE I WANT TO CHANGE THE VISIBILITY
TextView settingSubtitle = (TextView) view.findViewById(R.id.settingSubtitle);

if(!settingSubtitle.getText().equals("")) {
settingSubtitle.setVisibility(TextView.GONE);
}

return view;
}

我的 RecyclerView 适配器:

package de.myfirstapp.app;

import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

/**
* Created by Johannes on 19.01.2017.
*/

public class SettingsAdapter extends RecyclerView.Adapter<SettingsAdapter.MySettingHolder> {

private List<Settings> settingList;

public class MySettingHolder extends RecyclerView.ViewHolder {
public TextView settingTitle, settingSubtitle;

public MySettingHolder(View view) {
super(view);
settingTitle = (TextView) view.findViewById(R.id.settingTitle);
settingSubtitle = (TextView) view.findViewById(R.id.settingSubtitle);
}
}

public SettingsAdapter (List<Settings> settingList) {
this.settingList = settingList;
}

@Override
public MySettingHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.settings_list_row, parent, false);

return new MySettingHolder(itemView);
}

@Override
public void onBindViewHolder(MySettingHolder holder, int position) {
// Setting for one entry
Settings setting = settingList.get(position);
holder.settingTitle.setText(setting.getSettingTitle());
holder.settingSubtitle.setText(setting.getSettingSubtitle());
}

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

}

最佳答案

为什么不在 SettingsAdapter onBindViewHolder 方法中执行此操作?想象一下,您的 RecyclerView 中有一堆项目和一堆 settingSubtitle,系统如何理解您真正想要哪个 TextView

更新

@Override
public void onBindViewHolder(MySettingHolder holder, int position) {
// Setting for one entry
Settings setting = settingList.get(position);

if (setting.getSettingSubtitle().equals("")) {
holder.settingTitle.setText(setting.getSettingTitle());
holder.settingSubtitle.setVisibility(View.GONE);
} else {
holder.settingSubtitle.setVisibility(View.VISIBLE);
holder.settingTitle.setText(setting.getSettingTitle());
holder.settingSubtitle.setText(setting.getSettingSubtitle());
}
}

关于java - 访问 fragment 中的其他 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41743184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com