【发布时间】:2020-06-23 02:09:32
【问题描述】:
如何从 Activity 中设置 Fragment 的 EditText 的文本?
这里是活动代码:
public class MainActivity extends AppCompatActivity
{
FrameLayout simpleFrameLayout;
TabLayout tabLayout;
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
simpleFrameLayout = (FrameLayout) findViewById(R.id.simpleFrameLayout);
tabLayout = (TabLayout) findViewById(R.id.simpleTabLayout);
// Create a new Tab named "First"
TabLayout.Tab firstTab = tabLayout.newTab();
firstTab.setText("Personal"); // set the Text for the first Tab
tabLayout.addTab(firstTab); // add the tab at in the TabLayout
// Create a new Tab named "Second"
TabLayout.Tab secondTab = tabLayout.newTab();
secondTab.setText("Chat"); // set the Text for the second Tab
tabLayout.addTab(secondTab); // add the tab in the TabLayout
try {
Fragment fragment = null;
fragment = new FirstFragment();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.simpleFrameLayout, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
}
catch (Exception e) {
}
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
// get the current selected tab's position and replace the fragment accordingly
try {
Fragment fragment = null;
switch (tab.getPosition()) {
case 0:
fragment = new FirstFragment();
break;
case 1:
fragment = new SecondFragment();
break;
}
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.simpleFrameLayout, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
}
catch (Exception e) {
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
public void connect(){
//set text of EditText of SecondFragment
}
}
我正在寻找解决此问题的方法: 我想创建一个聊天客户端,为此我需要不时更新选项卡的 EditText 而无需切换到该选项卡。我还需要在切换标签时不丢失该 EditText 的内容。
【问题讨论】:
-
如果你不想丢失输入,那为什么要替换片段而不保留前一个呢?技术上添加的片段会保留它们的状态,每次切换标签时您只是将它们删除。
-
我不知道如何保留旧的:(
-
您需要在
if(savedInstanceState == null) {时添加两个片段,但在未显示时保留其中一个fragmentTransaction.detach()ed。从技术上讲,这也是FragmentPagerAdapter在ViewPager中的工作方式。您可以使用fragmentManager.findFragmentByTag()找到现有的 Fragment 实例。 -
如果您不断收到“静态 EditText”(这是一种反模式)的答案,我可能需要编写一个完整的解决方案...
-
我怎样才能通过切换标签来保留其中一个 fragmentTransaction.detach()?
标签: java android android-fragmentactivity android-tablayout