Android 将大量文本设置为Textview的最佳方法

Android 将大量文本设置为Textview的最佳方法,android,android-layout,android-viewpager,textview,Android,Android Layout,Android Viewpager,Textview,我面临一个新问题。 在我的应用程序中,有一部分我们称之为X。 X部件有5个选项卡(使用Viewpager和…) 当用户点击某个按钮开始X活动时,因为我必须为所有选项卡设置文本(共有5个),所以会有延迟,根据手机的不同,在低级手机上大约4-7秒!!! 那么,我能做些什么来解决这个问题呢? 我的方式: 1-更改我的UI设计,并将5个选项卡拆分为5个单个活动。 2-使用进度条(或类似进度条的东西),不要更改我的设计。(问题是我不知道如何做到这一点,我的意思是我不知道何时设置所有文本) 其他解决方案是什

我面临一个新问题。 在我的应用程序中,有一部分我们称之为X。 X部件有5个选项卡(使用Viewpager和…) 当用户点击某个按钮开始X活动时,因为我必须为所有选项卡设置文本(共有5个),所以会有延迟,根据手机的不同,在低级手机上大约4-7秒!!! 那么,我能做些什么来解决这个问题呢? 我的方式: 1-更改我的UI设计,并将5个选项卡拆分为5个单个活动。 2-使用进度条(或类似进度条的东西),不要更改我的设计。(问题是我不知道如何做到这一点,我的意思是我不知道何时设置所有文本)

其他解决方案是什么? 所以,如果我想使用AsynckTask,代码应该是这样的,对吗? 主要内容:

public class Law\u main活动{
框架布局fl_温度;
TextView btn_ASD;
查看页面查看页面;
PagerAdapter适配器;
表格布局;
ProgressBar ProgressBar;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.law_main);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
progressBar=(progressBar)findViewById(R.id.progressBar);
tabLayout=(tabLayout)findviewbyd(R.id.tab\u布局);
tabLayout.addTab(tabLayout.newTab().setText(“tab1”));
tabLayout.addTab(tabLayout.newTab().setText(“tab2”));
tabLayout.addTab(tabLayout.newTab().setText(“TAB 3”));
tabLayout.addTab(tabLayout.newTab().setText(“tab4”));
tabLayout.setTabGravity(tabLayout.GRAVITY\u-FILL);
fl_TEMP=(框架布局)findViewById(R.id.TEMP);
btn_ASD=(TextView)findViewById(R.id.ASD);
新建TxtTimer().execute();
最终视图appbar=findViewById(R.id.appbar);
viewPager=(viewPager)findViewById(R.id.pager);
viewPager.addOnPageChangeListener(新建TabLayout.TabLayoutOnPageChangeListener(TabLayout));
tabLayout.setOnTabSelectedListener(新的tabLayout.OnTabSelectedListener(){
@凌驾
已选择的公共选项卡(TabLayout.Tab){
setCurrentItem(tab.getPosition());
}
@凌驾
已选择的公共选项卡(TabLayout.Tab){
}
@凌驾
已重新选择公共选项卡(TabLayout.Tab){
}
});
}
私有类TxtTimer扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串背景(字符串…字符串){
返回null;
}
@凌驾
受保护的void onProgressUpdate(整型…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
适配器=新的PagerAdapter(getSupportFragmentManager(),tabLayout.getTabCount());
viewPager.setAdapter(适配器);
viewPager.setCurrentItem(1,true);
progressBar.setVisibility(View.GONE);
}
}
}
此代码的作用如下: 当用户单击打开X活动时,用户将停留在该活动中,然后在一段时间后,当所有文本都设置好后,X活动将打开,因此它毫无帮助。
我错了吗?

在选项卡中使用片段,并使用片段生命周期将内容加载到demend上,每个片段上加载1/5个文本

< P>根据您如何检索您的文本,请考虑使用AN。您还可以在片段加载时在其上放置一个进度圈,这样应用程序就不会出现冻结的情况。

基于RobVoisey所述,而不确切了解您的用例,我会先加载第一个选项卡的文本,让用户可以查看,同时加载其他选项卡的文本,同时在适当和/或必要时显示加载图形。

好的,这是比更改我的UI更好的方法。但有一个问题。我不能在Doinbackground中更改UI元素,也不能在其他地方更改它们,如“onPreExecute”和。。。没什么帮助。@mil您可以在“onPostExecute()”中更改UI,此方法在主线程上运行。好的,rob,但我的代码中有一个问题,代码u看看?(在主要问题中添加)@mil您需要在async tab'doInBackground'方法中创建选项卡,这是您放置工作主体的地方,这会减慢它的速度。问题是什么?好的,我想,通过这一行在适配器中创建的每个选项卡的内容:Adapter=new PagerAdapter(getSupportFragmentManager(),tabLayout.getTabCount());不是吗?是的;这不是最好的方法,因为在低电平设备中,我们第一次进行了延迟交换。你有没有想过你做错了什么?喜欢在UI线程而不是工作线程上做太多工作吗?检查你自己。你是对的,但该程序是一个简单的应用程序,我不想根据屏幕大小加载文本行,还有一点,我只是不放弃你的答案,并感谢你的答案。你可能认为我疯了,但如果我的用户在开始活动后立即移动到其他选项卡,事情可能会变得滞后,所以我只是让用户留下来,直到所有的文本都被加载,并向用户显示某种加载页面,结果是,加载后用户从未经历任何滞后。我理解你的意思,但我觉得最好让用户随意导航,如果没有加载内容,则向他们显示加载图形。这样,用户就知道应用程序正在运行,但仍在加载一些信息。当然,也就是说,在某些情况下,加载屏幕可能更合适,只有您才能最终决定。祝你好运
public class Law_main extends AppCompatActivity {
    FrameLayout fl_TEMP;
    TextView btn_ASD;
    ViewPager viewPager;
    PagerAdapter adapter;
    TabLayout tabLayout;
    ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.law_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);

        tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText("TAB 1"));
        tabLayout.addTab(tabLayout.newTab().setText("TAB 2"));
        tabLayout.addTab(tabLayout.newTab().setText("TAB 3"));
        tabLayout.addTab(tabLayout.newTab().setText("TAB 4"));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);


        fl_TEMP = (FrameLayout) findViewById(R.id.TEMP);
        btn_ASD = (TextView) findViewById(R.id.ASD);


        new TxtTimer().execute();


        final View appbar = findViewById(R.id.appbar);

        viewPager = (ViewPager) findViewById(R.id.pager);



        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());

            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });


    }




    private class TxtTimer extends AsyncTask<String, Integer, String> {
        @Override
        protected void onPreExecute() {

            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... strings) {


            return null;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);

        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
            viewPager.setAdapter(adapter);

            viewPager.setCurrentItem(1, true);
            progressBar.setVisibility(View.GONE);
        }
    }
}