android - 片段中的 Sharedpreference Edittext
问题描述
到目前为止,我有一个片段,其中有 2x 编辑文本和一个按钮。我需要做的是保存我在edittext中编写的文本,这样当我更改为另一个片段然后返回时,我会看到我在Edittexts中写的最后一件事。
为了解决这个问题,我使用了sharedpreference,但我只能让它与一个按钮一起工作,这样当我按下按钮时,edittext中的文本就会被保存,然后我在片段中的onCreate上检索它。我想要的是自动更新,所以我不必按任何按钮。
public class KontaktFragment extends Fragment {
private EditText beskedTekst;
private EditText emneTekst;
private Button kontaktSend;
public KontaktFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate( R.layout.fragment_kontakt, container, false );
beskedTekst = (EditText) view.findViewById( R.id.beskedEdit );
emneTekst = (EditText) view.findViewById( R.id.emneEdit );
kontaktSend = (Button) view.findViewById( R.id.kontaktButton );
hentTekst();
kontaktSend.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
sendMail();
}
} );
return view;
}
public void sendMail() {
String besked = beskedTekst.getText().toString();
String emne = emneTekst.getText().toString();
//String recipientList = kontaktTekst.getText().toString();
//String[] recipients = recipientList.split(",");
gemTekst();
Intent intent = new Intent( Intent.ACTION_SEND );
intent.putExtra( Intent.EXTRA_EMAIL, new String[]{"xxx"} );
intent.putExtra( Intent.EXTRA_SUBJECT, emne );
intent.putExtra( Intent.EXTRA_TEXT, besked );
intent.setType( "message/rfc822" );
startActivity( Intent.createChooser( intent, "Vælg en email klient" ) );
intent.setData( Uri.parse( "mailto:" ) );
}
public void gemTekst() {
String besked = beskedTekst.getText().toString();
String emne = emneTekst.getText().toString();
SharedPreferences sp = this.getActivity().getSharedPreferences( "kontakt", 0 );
SharedPreferences.Editor sedt = sp.edit();
sedt.putString( "textvalue", besked );
sedt.putString( "txtopertaive", emne );
sedt.commit();
}
public void hentTekst() {
SharedPreferences sp = getActivity().getSharedPreferences( "kontakt", 0 );
String tValue = sp.getString( "textvalue", "" );
String tOperative = sp.getString( "txtopertaive", "" );
beskedTekst.setText( tValue );
emneTekst.setText( tOperative );
}
}
解决方案
在片段中添加onPause
生命周期方法并添加您需要的方法。
@Override
public void onPause() {
super.onPause();
gemTekst();
}
推荐阅读
- android - 底部导航元素在键入时移动位置
- garmin - 后台服务委托中的 Garmin makeWebRequest 无法从回调中唤醒应用程序
- reactive-programming - 如何使用项目反应器定期采样通量?
- agda - AGDA 中案例拆分的未绑定变量
- kubernetes - Pod 与具有相同标签的节点的亲和性
- python - Python ModuleNotFoundError 没有名为“自定义”的模块
- scala - Spark 和 CSV:如何从推断的模式中判断哪些列允许为空?
- javascript - 如果我的函数不适用于工作表中的数据,则使用 IF 语句创建错误消息
- powershell - PowerShell 帮助 - 隐藏错误 [新手]
- bash - 未找到 GitlabCI 工件