Java 安卓碎片——”;“活动已被销毁”;在片段中按文本后
因此,我一直在尝试在我的应用程序中实现一个功能,当我从Java 安卓碎片——”;“活动已被销毁”;在片段中按文本后,java,android,android-fragments,Java,Android,Android Fragments,因此,我一直在尝试在我的应用程序中实现一个功能,当我从searchBoxResultsFragment中单击一个用户名时,该用户名是显示搜索框用户结果的一个片段,它将转到用户的配置文件 用户的配置文件将被放置在名为UserFragment的新片段中。因此,基本上,searchBoxResultsFragment将被UserFragment替换。因此,我在调用函数中使用了ft.replace(),为UserFragment创建了一个新实例,它位于MainNavigation活动类的UserFrag
searchBoxResultsFragment
中单击一个用户名时,该用户名是显示搜索框用户结果的一个片段,它将转到用户的配置文件
用户的配置文件将被放置在名为UserFragment
的新片段中。因此,基本上,searchBoxResultsFragment
将被UserFragment
替换。因此,我在调用函数中使用了ft.replace()
,为UserFragment
创建了一个新实例,它位于MainNavigation
活动类的UserFragment()
函数中
但是,我运行时遇到一个错误活动已被破坏
,导致我的应用程序崩溃
我是Android开发新手,正在自学如何开发应用程序
以下是我的代码:
MainNavigation.java
public class MainNavigation extends AppCompatActivity {
private BottomNavigationView mBottomNav;
// fix main layout of navigation
ImageButton uProfileBtn, searchBox;
GetSearchBoxResults getSearcResults;
EditText searchBoxText;
Fragment frag = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_navigation);
// hide action bar
if(this.getSupportActionBar()!=null) {
this.getSupportActionBar().hide();
}
uProfileBtn = (ImageButton) findViewById(R.id.profileBtn);
searchBox = (ImageButton) findViewById(R.id.searchFriendBtn);
mBottomNav = (BottomNavigationView) findViewById(R.id.navigation);
mBottomNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
selectFragment(item);
return true;
}
});
uProfileBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// goes to the Profile Fragment
profileFragment();
}
});
searchBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// goes to the Search Box Fragment
searchBoxResultsFragment();
}
});
}
private void profileFragment() {
frag = ProfileFragment.newInstance("test1", "test2");
if (frag != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragmentContainer, frag, frag.getTag());
ft.commit();
}
}
private void searchBoxResultsFragment() {
frag = SearchBoxFragment.newInstance("test1", "test2");
if (frag != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragmentContainer, frag, frag.getTag());
ft.commit();
}
}
// so it can be called from the adapter
public void userFragment() {
frag = UserFragment.newInstance("test1", "test2");
if (frag != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragmentContainer, frag, frag.getTag());
ft.commit();
}
}
private void selectFragment(MenuItem item) {
// init corresponding fragment
switch (item.getItemId()) {
case R.id.nav_home_btn:
frag = HomeFragment.newInstance("test1", "test2");
break;
case R.id.nav_message_btn:
frag = MessagesFragment.newInstance("test1", "test2");
break;
case R.id.nav_notif_btn:
frag = NotificationsFragment.newInstance("test1", "test2");
break;
case R.id.nav_settings_btn:
frag = SettingsFragment.newInstance("test1", "test2");
break;
}
// uncheck the other items
for (int i = 0; i< mBottomNav.getMenu().size(); i++) {
MenuItem menuItem = mBottomNav.getMenu().getItem(i);
menuItem.setChecked(menuItem.getItemId() == item.getItemId());
}
// sets the fragment to show
if (frag != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragmentContainer, frag, frag.getTag());
ft.commit();
}
}
}
我将非常感谢任何帮助 您所做的错误是,您正在以编程方式在此行创建活动的新实例
mainNavHelper = new MainNavigation();
要解决此问题,您可以将MainNavigation
实例传递到适配器并使用它
public class SearchResultsAdapter extends RecyclerView.Adapter<SearchResultsAdapter.CustomViewHolder>{
private List<User> users;
Context context;
public class CustomViewHolder extends RecyclerView.ViewHolder {
public TextView userFN, userUN;
public CustomViewHolder(View view) {
super(view);
userFN = (TextView) view.findViewById(R.id.userFullName);
userUN = (TextView) view.findViewById(R.id.userUsername);
// when userUN is clicked, then go to their profile
userUN.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
userUN.setText("this text was clicked");
if (context instanceOf MainNavigation) {
((MainNavigation) context).userFragment();
}
}
});
}
}
public SearchResultsAdapter(Context context, List<User> users){
this.context = context;
this.users = users;
}
@Override
public SearchResultsAdapter.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.users_list, parent, false);
return new SearchResultsAdapter.CustomViewHolder(itemView);
}
@Override
public void onBindViewHolder(SearchResultsAdapter.CustomViewHolder holder, int position) {
User user = users.get(position);
String uFN = user.getFirstName() + " " + user.getLastName();
holder.userFN.setText(uFN);
holder.userUN.setText(user.getUsername());
}
@Override
public int getItemCount() {
return users.size();
}
}
公共类SearchResultAdapter扩展了RecyclerView.Adapter{
私人名单用户;
语境;
公共类CustomViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图userFN,userUN;
公共CustomViewHolder(视图){
超级(视图);
userFN=(TextView)view.findViewById(R.id.userFullName);
userUN=(TextView)view.findViewById(R.id.userUserUserName);
//单击userUN后,转到其配置文件
userUN.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
userUN.setText(“单击了此文本”);
if(主导航的上下文实例){
((主导航)context.userFragment();
}
}
});
}
}
公共SearchResultsAdapter(上下文、列表用户){
this.context=上下文;
this.users=用户;
}
@凌驾
public SearchResultsAdapter.CustomViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.users\u列表,父项,false);
返回新的SearchResultsAdapter.CustomViewHolder(itemView);
}
@凌驾
BindViewHolder上的公共无效(SearchResultsAdapter.CustomViewHolder,int位置){
User=users.get(位置);
字符串uFN=user.getFirstName()+“”+user.getLastName();
holder.userFN.setText(uFN);
holder.userUN.setText(user.getUsername());
}
@凌驾
public int getItemCount(){
返回users.size();
}
}
您所做的错误在于,您正在此行以编程方式创建活动的新实例
mainNavHelper = new MainNavigation();
要解决此问题,您可以将MainNavigation
实例传递到适配器并使用它
public class SearchResultsAdapter extends RecyclerView.Adapter<SearchResultsAdapter.CustomViewHolder>{
private List<User> users;
Context context;
public class CustomViewHolder extends RecyclerView.ViewHolder {
public TextView userFN, userUN;
public CustomViewHolder(View view) {
super(view);
userFN = (TextView) view.findViewById(R.id.userFullName);
userUN = (TextView) view.findViewById(R.id.userUsername);
// when userUN is clicked, then go to their profile
userUN.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
userUN.setText("this text was clicked");
if (context instanceOf MainNavigation) {
((MainNavigation) context).userFragment();
}
}
});
}
}
public SearchResultsAdapter(Context context, List<User> users){
this.context = context;
this.users = users;
}
@Override
public SearchResultsAdapter.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.users_list, parent, false);
return new SearchResultsAdapter.CustomViewHolder(itemView);
}
@Override
public void onBindViewHolder(SearchResultsAdapter.CustomViewHolder holder, int position) {
User user = users.get(position);
String uFN = user.getFirstName() + " " + user.getLastName();
holder.userFN.setText(uFN);
holder.userUN.setText(user.getUsername());
}
@Override
public int getItemCount() {
return users.size();
}
}
公共类SearchResultAdapter扩展了RecyclerView.Adapter{
私人名单用户;
语境;
公共类CustomViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图userFN,userUN;
公共CustomViewHolder(视图){
超级(视图);
userFN=(TextView)view.findViewById(R.id.userFullName);
userUN=(TextView)view.findViewById(R.id.userUserUserName);
//单击userUN后,转到其配置文件
userUN.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
userUN.setText(“单击了此文本”);
if(主导航的上下文实例){
((主导航)context.userFragment();
}
}
});
}
}
公共SearchResultsAdapter(上下文、列表用户){
this.context=上下文;
this.users=用户;
}
@凌驾
public SearchResultsAdapter.CustomViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.users\u列表,父项,false);
返回新的SearchResultsAdapter.CustomViewHolder(itemView);
}
@凌驾
BindViewHolder上的公共无效(SearchResultsAdapter.CustomViewHolder,int位置){
User=users.get(位置);
字符串uFN=user.getFirstName()+“”+user.getLastName();
holder.userFN.setText(uFN);
holder.userUN.setText(user.getUsername());
}
@凌驾
public int getItemCount(){
返回users.size();
}
}
mainNavHelper = new MainNavigation();
public class SearchResultsAdapter extends RecyclerView.Adapter<SearchResultsAdapter.CustomViewHolder>{
private List<User> users;
Context context;
public class CustomViewHolder extends RecyclerView.ViewHolder {
public TextView userFN, userUN;
public CustomViewHolder(View view) {
super(view);
userFN = (TextView) view.findViewById(R.id.userFullName);
userUN = (TextView) view.findViewById(R.id.userUsername);
// when userUN is clicked, then go to their profile
userUN.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
userUN.setText("this text was clicked");
if (context instanceOf MainNavigation) {
((MainNavigation) context).userFragment();
}
}
});
}
}
public SearchResultsAdapter(Context context, List<User> users){
this.context = context;
this.users = users;
}
@Override
public SearchResultsAdapter.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.users_list, parent, false);
return new SearchResultsAdapter.CustomViewHolder(itemView);
}
@Override
public void onBindViewHolder(SearchResultsAdapter.CustomViewHolder holder, int position) {
User user = users.get(position);
String uFN = user.getFirstName() + " " + user.getLastName();
holder.userFN.setText(uFN);
holder.userUN.setText(user.getUsername());
}
@Override
public int getItemCount() {
return users.size();
}
}