Не устанавливается текст TextView во Фрагменте
Логика такова: есть Activity с TextField. Данные с него идут в MainActivity, в котором идёт работа с фрагментами. Через Bundle получаю данные с TextField в виде String и уже через другой Bundle отправляю в класс фрагмента, где принимаю String и устанавливаю текст. Но текст не сеттится, почему? Код прилагается. Заранее спасибо за ответы
MainActivity.java
package com.example.checklist;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button createTask;
Button taskList;
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment fragmentUNLOGIN = new BottomButtonsFragment();
Fragment fragmentAfterLOGIN = new bottomBarMainAftertLoginFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Bundle arguments = getIntent().getExtras();
createTask = (Button) findViewById(R.id.createTask);
createTask.setOnClickListener(this);
taskList = (Button) findViewById(R.id.taskList);
taskList.setOnClickListener(this);
Boolean isLogin = arguments != null && arguments.getBoolean("isLogin", false);
String userName = arguments != null ? arguments.getString("UserName") : null;
if (isLogin == false) {
ft.add(R.id.fragmentsMainActivity, fragmentUNLOGIN);
} else {
Bundle bundle = new Bundle();
bundle.putString("UserName", userName);
fragmentAfterLOGIN.setArguments(bundle);
ft.replace(R.id.fragmentsMainActivity, fragmentAfterLOGIN);
}
ft.commit();
}
@Override
public void onClick (View v){
Bundle arguments = getIntent().getExtras();
Boolean isLogin = arguments != null && arguments.getBoolean("isLogin", false);
Intent intent;
switch (v.getId()) {
case R.id.createTask:
if (isLogin == false){
Toast mes1 = Toast.makeText(MainActivity.this, "Вы не вошли в аккаунт. Пожалуйста войдите в аккаунт", Toast.LENGTH_SHORT);
mes1.show();
} else {
intent = new Intent(MainActivity.this, CreateTaskActivity.class);
startActivity(intent);
}
break;
case R.id.taskList:
if (isLogin == false){
Toast mes1 = Toast.makeText(MainActivity.this, "Вы не вошли в аккаунт. Пожалуйста войдите в аккаунт", Toast.LENGTH_SHORT);
mes1.show();
} else {
intent = new Intent(MainActivity.this, TaskListActivity.class);
startActivity(intent);
}
break;
case R.id.loginOFF:
intent = new Intent(MainActivity.this, offlineAccountLoginActivity.class);
startActivity(intent);
break;
default:
break;
}
}
}
offlineAccountLoginActivity.java
package com.example.checklist;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class offlineAccountLoginActivity extends AppCompatActivity implements View.OnClickListener {
Button loginButtonOff;
TextView loginNameOff;
boolean isLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_offline_account_login);
loginButtonOff = (Button) findViewById(R.id.loginButtonOff);
loginButtonOff.setOnClickListener(this);
loginNameOff = (TextView) findViewById(R.id.loginNameOFF);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.loginButtonOff: ;
isLogin = true;
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("isLogin", isLogin);
intent.putExtra("UserName", loginNameOff.getText());
startActivity(intent);
break;
default:
break;
}
}
}
bottomBarMainAftertLoginFragment
package com.example.checklist;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class bottomBarMainAftertLoginFragment extends Fragment {
TextView userName;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_bottom_bar_main_aftert_login, container, false);
userName = (TextView) v.findViewById(R.id.userName);
Bundle bundle = getArguments();
if (bundle != null) {
userName.setText(bundle.getString("UserName"));
}
return inflater.inflate(R.layout.fragment_bottom_bar_main_aftert_login, container, false);
}
}
fragment_bottom_bar_main_aftert_login.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".bottomBarMainAftertLoginFragment">
<TextView
android:id="@+id/userName"
android:layout_width="190dp"
android:layout_height="50dp"
android:layout_gravity="bottom|left"
android:gravity="center"
android:text="TextView" />
<Button
android:id="@+id/logoutButton"
android:layout_width="190dp"
android:layout_height="50dp"
android:layout_gravity="bottom|right"
android:text="Выход" />
</FrameLayout>
Ответы (1 шт):
Автор решения: ЮрийСПб
→ Ссылка
Вы в onCreateView сетите текст в одну разметку, а отображаете другую, без текста. Просто возвращайте изменённую разметку из метода. Т.е. переменную v