簡體   English   中英

如何從 Mainactivity 中編輯 Fragment 中的 TextView

[英]How to edit TextView in Fragment from Mainactivity

我搜索了很多文檔,並在下面編寫了完整的代碼,但是每次運行它時,它都說 view is null ?

請幫我

片段文件

public class LoginFrag extends Fragment {
View view;
public LoginFrag(){

}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
   
 view =  inflater.inflate(R.layout.fragment_login, container, false);
return view;
}

public void setTextView(int layout, String content){
    if(view == null){
     //Always return view=null ???
        Log.e("view_null","yes");
        return;
    }
    TextView textView = view.findViewById(layout);
    textView.setText(content);
}

}

主活動文件

LoginFrag loginFrag = new LoginFrag();
goToFrag(loginFrag);

String text= "test set Text";

loginFrag.setTextView(R.id.fg,text);

函數 goToFrag

private void goToFrag(Fragment fragment){
    fragment.setArguments(getIntent().getExtras());
    FragmentManager fragManager = getSupportFragmentManager();
    FragmentTransaction transaction = fragManager.beginTransaction();
    transaction.add(R.id.fragment_container_start, fragment);
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    transaction.commit();
}

Fragment布局中的TextView

<TextView
    android:id="@+id/fg"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="" />

請嘗試以下方式

(1)一種方式

public class LoginFrag extends Fragment {
View view;
String text;
public LoginFrag(String text{
  this.text = text;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
   
 view =  inflater.inflate(R.layout.fragment_login, container, false);
 setTextView(R.id.fg,text); 
 return view;
}

public void setTextView(int layout, String content){    
    TextView textView = view.findViewById(layout);
    textView.setText(content);
}

}

MainActivity{
  String text= "test set Text";
  LoginFrag loginFrag = new LoginFrag(text.toString() 
  goToFrag(loginFrag);
}

(2)第二種方式

public class LoginFrag extends Fragment {
View view;
MainActivity mainActivty;
public LoginFrag(MainActivity mainActivty{
  this.mainActivty = mainActivty
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
   
 view =  inflater.inflate(R.layout.fragment_login, container, false); 
 return view;
}

@Override
void onStart(){
  super.onStart();
  mainActivty.refresh(this) 
}

public void setTextView(int layout, String content){
    if(view == null){
     //Always return view=null ???
        Log.e("view_null","yes");
        return;
    }
    TextView textView = view.findViewById(layout);
    textView.setText(content);
 }
}

MainActivity{
  String text= "test set Text"; 
  LoginFrag loginFrag = new       LoginFrag(text.toString() 
  goToFrag(loginFrag);

 public void onRefresh(Fragment fragment){
   if(fragment instanceOf LoginFrag){
     ((LoginFrag)fragment).setTextView(R.id.fg,text);
   }elseif(fragment instanceOf Signup){
     ((Signup)fragment).setTextView(R.id.fg,text);   
  
   }  
 }
}

(3)第三種方式

 LoginFragment{
       public boolean setTextView(int layout, String content){
        if(view == null){
         //Always return view=null ???
            Log.e("view_null","yes");
            return false;
        }
        TextView textView = view.findViewById(layout);
        textView.setText(content);
        return true;
      }
    }

MainActivity{

 LoginFrag loginFrag = new LoginFrag();
goToFrag(loginFrag);

  String text= "test set Text";
  new Handler().postDelayed(new Runnable(){

    boolean isSuccess = loginFrag.setTextView(R.id.fg,text); 
     if(isSuccess){
       handler.removeCallbacks(this)
       handler.postDelayed(1000);
     }      
  },1000)
  
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM