我使用一个bundle在片段之间传输数据,数据传输成功。但是,如果屏幕从fragment1更改为fragment2,fragment1的生命周期将变为ondestroy,写入edittext的内容不应该被删除吗?我想在片段切换时删除edittext的内容。从gif中可以看到,在这里输入图像描述,即使片段1的生命周期是ondestroy,当它返回到片段1时,值仍保留在edittext中。
主活动.java
package com.example.fragmentbundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button frag1,frag2;
Fragment1 fragment1;
Fragment2 fragment2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
frag1 = (Button)findViewById(R.id.frag1);
frag2 = (Button)findViewById(R.id.frag2);
fragment1 = new Fragment1();
fragment2 = new Fragment2();
}
@Override
protected void onResume() {
super.onResume();
frag1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frameLayout,fragment1).commit();
}
});
frag2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frameLayout,fragment2).commit();
}
});
}
}
碎片1.java
package com.example.fragmentbundle;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
public class Fragment1 extends Fragment {
private Button submit;
private EditText putfrag1;
private TextView getfrag1;
private Fragment2 fragment2;
MainActivity activity;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = (MainActivity)getActivity();
Toast.makeText(activity,"onCreate()",Toast.LENGTH_SHORT).show();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_layout1,container,false);
fragment2 = new Fragment2();
putfrag1 = (EditText)rootView.findViewById(R.id.put_frag1);
getfrag1 = (TextView) rootView.findViewById(R.id.get_frag1);
submit = (Button)rootView.findViewById(R.id.submit);
return rootView;
}
@Override
public void onResume() {
super.onResume();
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if( getFragmentManager() != null) {
Bundle bundle = new Bundle();
String getText = putfrag1.getText().toString();
bundle.putString("frag1",getText);//Bundle data to fragment 2, transfer and commit
fragment2.setArguments(bundle);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frameLayout,fragment2).commit();
}
}
});
}
@Override
public void onPause() {
super.onPause();
Toast.makeText(activity,"onPause()",Toast.LENGTH_SHORT).show();
}
@Override
public void onDestroyView() {
super.onDestroyView();
Toast.makeText(activity,"onDestroyView()",Toast.LENGTH_SHORT).show();
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(activity,"onDestroy()",Toast.LENGTH_SHORT).show();
}
}
碎片2.java
package com.example.fragmentbundle;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.Toolbar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
public class Fragment2 extends Fragment {
private TextView textView;
private Button button;
MainActivity activity;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = (MainActivity)getActivity();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_layout2,container,false);
textView = (TextView)rootView.findViewById(R.id.getfrag2);
button = (Button)rootView.findViewById(R.id.submit);
return rootView;
}
@Override
public void onResume() {
super.onResume();
if (getArguments()!=null){ //When getArgument is not null, get the transmitted data and setText to textView
String getText = getArguments().getString("frag1");
Toast.makeText(activity,getText,Toast.LENGTH_SHORT).show();
textView.setText(getText);
}
}
}
在此处输入图像描述
暂无答案!
目前还没有任何答案,快来回答吧!