java - 访问 fragment 中的其他 View

标签 java android

我在设置 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/

相关文章:

java - Elasticsearch 中的 SearchPhaseExecutionException

java - 使用 PDFBox 2.0 从 PDF 中提取文本

android - getAdapterPosition() 不是方法

java - 如何确定android中输入设备的来源是什么?

java - 有没有办法关闭方法的反射?

java - GWT - 向页面添加元素后的 CSS 动画

java - 如何隐藏PDF文件中的文字?

Android 以编程方式安装 apk

java - 面向对象编程与抽象数据类型编程的区别(多态性)

机器人喷射器: "Could not resolve all artifacts"; "Failed to transform artifact"在新项目上