Android 如何在屏幕旋转期间在RecyclerView中保存EditText中的数据

Android 如何在屏幕旋转期间在RecyclerView中保存EditText中的数据,android,android-fragments,android-edittext,android-recyclerview,Android,Android Fragments,Android Edittext,Android Recyclerview,我读到EditText不能很好地与RecyclerView配合使用,但我看到一个应用程序可以很好地工作(avito)。现在我正试图理解它是如何在那里实现的。 我有一个带有RecyclerView的片段,在recycler视图中,我只有标题夹中的EditText(只有一个项目带有EditText)。在这个标题中,我有大约五个类似的EditText和TextView(城市、标题、描述、价格等),为了不复制所有视图的代码,我在其中创建了一个自定义视图类,我在下面展示了这个类 public class

我读到EditText不能很好地与RecyclerView配合使用,但我看到一个应用程序可以很好地工作(avito)。现在我正试图理解它是如何在那里实现的。 我有一个带有RecyclerView的片段,在recycler视图中,我只有标题夹中的EditText(只有一个项目带有EditText)。在这个标题中,我有大约五个类似的EditText和TextView(城市、标题、描述、价格等),为了不复制所有视图的代码,我在其中创建了一个自定义视图类,我在下面展示了这个类

public class CustomEditTextView extends LinearLayout implements TextWatcher {
private LayoutInflater inflater;
private TextView textView;
private final EditText editText;
private TextView tvWarning;
private View view;

private String hint;
private String text ;
private String title;
private String warning;

private boolean isNumber = false;

private SpinnerCitySetupListener spinnerCitySetupListener;

public CustomEditTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    inflater = LayoutInflater.from(context);
    view = inflater.inflate(R.layout.custom_edittext, this, true);
    textView = (TextView) view.findViewById(R.id.mycustom_tvTitle);
    editText = (EditText) view.findViewById(R.id.mycustom_etTitle);
    tvWarning = (TextView) view.findViewById(R.id.mycustom_tvWarning);

    textView.setVisibility(GONE);
    tvWarning.setVisibility(GONE);
}

public void setCustomVisibility(View view,boolean isVisible){
    view.setVisibility(isVisible?VISIBLE:GONE);
}

public void tuningView() {
    editText.addTextChangedListener(this);
    if(isNumber)editText.setInputType(InputType.TYPE_CLASS_NUMBER);
}

public void setTitle(String title){
    textView.setText(title);
    this.title = title;
}

public void setHint(String hint){
    editText.setHint(hint);
    this.hint = hint;
}

public void setWarning(String warning){
    tvWarning.setText(warning);
    this.warning = warning;
}

public void setText(String text) {
    editText.setText(text);
}

public String getText(){
    Log.i("CUSTOM VIEW","GET TEXT FROM VIEW: "+ text);
     return  text;
}

public TextView getTvWarning(){
    return tvWarning;
}

public void setInputType(boolean isNumber){
    this.isNumber = isNumber;
}

public void setSpinnerCityListener(SpinnerCitySetupListener listener){
    spinnerCitySetupListener = listener;
}

//region TextChangedListener
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
   text = charSequence.toString();
}

@Override
public void afterTextChanged(Editable editable) {
    if (editable.toString().length()!= 0) {
        setCustomVisibility(textView,true);
        text = editable.toString();
        if(spinnerCitySetupListener!= null) spinnerCitySetupListener.spinnerActivation(false);}
    else {setCustomVisibility(textView,false);
        if(spinnerCitySetupListener!= null) spinnerCitySetupListener.spinnerActivation(true);}
}
//endregion
}

我的舱单:`

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.CALL_PHONE"/>
<!-- <uses-permission android:name="android.permission.SEND_SMS"/>-->
<permission
    android:name="com.android.qrz.gcm.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

<uses-permission android:name="com.android.qrz.gcm.permission.C2D_MESSAGE" />

<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<application
    android:name="android.support.multidex.MultiDexApplication"
    android:allowBackup="true"
    android:icon="@drawable/qrz_icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">

    <!--android:name=".QRZApp"-->
    <meta-data
        android:name="AA_DB_NAME"
        android:value="QRZ.db" />
    <meta-data
        android:name="AA_DB_VERSION"
        android:value="1" />

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="AIzaSyBlOgCglvJdnPS476oiF4MRAo3pV3nQ8w8"/>

    <receiver
        android:name=".receiver.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />

            <category android:name="com.android.qrz.receiver" />
        </intent-filter>
    </receiver>
    <receiver
        android:name=".receiver.InternetCheckReceiver"
        android:label="NetworkConnection" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>

    <service
        android:name=".services.GCMIntentService"
        android:process=":remote" />

    <activity
        android:name=".activity.SplashScreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <!--<activity-->
        <!--android:name=".activity.main_menu.MainMenu"-->
        <!--android:label="@string/title_activity_menu" >-->
    <!--</activity>-->

    <activity
        android:name=".activity.main_menu.NewMainMenu"
        android:label="@string/title_activity_menu" >

    </activity>
    <activity
        android:name=".activity.LoginActivity"
        android:label="@string/title_activity_login" >
    </activity>
    <!--<activity-->
        <!--android:name=".activity.Registration"-->
        <!--android:label="@string/title_activity_registration" >-->
    <!--</activity>-->
    <activity
        android:name=".activity.registration.NewRegistration"
        android:label="@string/title_activity_registration" >
    </activity>
    <activity
        android:name=".activity.News"
        android:label="@string/title_activity_news" >
    </activity>
    <activity
        android:name=".activity.news.DetailNewsActivity"
        android:label="@string/title_activity_news" >
    </activity>
    <!--<activity-->
        <!--android:name=".activity.Callbook"-->
        <!--android:label="@string/title_activity_callbook" >-->
    <!--</activity>-->
    <activity
        android:name=".activity.NewCallbook"
        android:label="Callbook" >
    </activity>
    <activity
        android:name=".activity.PhotoGallery"
        android:label="@string/title_activity_photo_gallery" >
    </activity>
    <!--<activity
        android:name=".activity.DiplomsActivity"
        android:label="@string/title_activity_diploms" >
    </activity>-->
    <activity
        android:name=".activity.new_diploms.ui.MainDiplomActivity"
        android:label="@string/title_activity_new_diploms" >
    </activity>
    <activity
        android:name=".activity.new_diploms.ui.detail_diplom.DiplomDetailActivity"
        android:label="@string/title_activity_new_detail_diploms" >
    </activity>
    <activity
        android:name=".activity.new_diploms.ui.searching.SearchingActivity"
        android:label="@string/title_activity_searching_diploms" >
    </activity>
    <activity
        android:name=".activity.BirthdaysActivity"
        android:label="@string/title_activity_birthdays" >
    </activity>
    <activity
        android:name=".activity.competitions.CompetitionsActivity"
        android:label="@string/title_activity_competitions" >
    </activity>
    <activity
        android:name=".activity.DXActivity"
        android:label="@string/title_activity_DX" >
    </activity>
    <activity
        android:name=".activity.DXDetailActivity"
        android:label="@string/title_activity_DX_detail" >
    </activity>
    <activity
        android:name=".activity.base_of_frequency.BaseFrequencyActivity"
        android:label="@string/title_activity_frequency" >
    </activity>
    <activity
        android:name=".activity.qsl.QslActivity"
        android:label="@string/title_activity_qsl" >
    </activity>
    <activity
        android:name=".activity.qsl.QSLSearching"
        android:label="@string/title_activity_qsl_searching" >
    </activity>
    <activity
        android:name=".activity.declarations.BillboardActivity"
        android:label="@string/title_activity_billboard" >
    </activity>

    <activity
        android:name=".activity.declarations.SearchingFilterActivity"
        android:label="@string/title_activity_filters_for_search"
        >
    </activity>
    <activity
        android:name=".activity.declarations.NewSearchingDeclarationActivity"
        android:label="@string/title_activity_searching_declaration" >
    </activity>
    <activity
        android:name=".activity.declarations.ListDeclarationsActivity"
        android:label="@string/title_activity_list_declarations" >
    </activity>

    <activity
        android:name=".activity.declarations.DeclarationDetailActivity"
        android:label="@string/title_activity_declaration_detail" >
    </activity>

    <activity
        android:name=".activity.personal_activity.PersonalActivity"
        android:label="@string/title_activity_personal" >
        <intent-filter>
            <action android:name="android.intent.action.PICK"></action>
        </intent-filter>
    </activity>
    <activity
        android:name=".activity.personal_activity.create_declaration.CreateDeclarationActivity"
        android:label="@string/title_activity_create_declaration" >
    </activity>

    <activity
        android:name=".activity.personal_activity.create_qsl_manager.CreateQSLManagerActivity"
        android:label="@string/title_activity_create_qsl" >
    </activity>

    <activity
        android:name=".activity.personal_activity.create_dx_reporter.CreateDXReporterActivity"
        android:label="@string/title_activity_create_dx_reporter" >
    </activity>
    <activity
        android:name=".activity.personal_activity.create_frequency.CreateFrequencyActivity"
        android:label="@string/title_activity_create_frequency" >
    </activity>

    <activity
        android:name=".activity.personal_activity.settings.PersonalSettingsActivity"
        android:label="@string/title_activity_settings" >
    </activity>

    <activity
        android:name=".activity.ForumActivity"
        android:label="@string/title_activity_forum" >
    </activity>

    <activity
        android:name=".activity.AboutAppActivity"
        android:label="@string/title_activity_about_app" >
    </activity>

    <service
        android:name=".rest_service.rest.RestService"
        android:enabled="true"
        android:exported="true" >
    </service><!-- ATTENTION: This was auto-generated to add Google Play services to your project for
 App Indexing.  See https://g.co/AppIndexing/AndroidStudio for more information. -->
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

</application>

`


我的问题是afterTextChanged或ContextChanged中的变量“text”不是空的,在这部分代码中,所有操作都很好,但是当我想从我的头文件夹中获取此文本时,我调用customView.getText()以在OnSavedInstance的片段中发送此数据,此变量“text”变为空,但EditText一直包含文本,为什么会发生这种情况?

请上传你的清单文件,我也这么做了(清单)
我读过,而edittext在recyclerView中工作得很糟糕,但我看到了它的应用程序(avito)
-你没有使用edittext,你使用的是一个自定义视图,它扩展了包含其他视图的
线性布局
-请看这篇文章: