[英]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.