充气后的Android动态命名的TextView(dynamically name textview

2019-11-01 20:08发布

我M在滚动视图充气4分线性布局多次。 每个布局在它的头一个冠军。 代码段如下。

for(int j=0;j<qType.length;j++)
    {           
        LinearLayout.LayoutParams siz = new LinearLayout.LayoutParams(width, height);;
        if(qType[j]==0)
        {               
            view1 = getLayoutInflater().inflate(R.layout.layout1, main_layout,false);
            siz = new LinearLayout.LayoutParams(width, height/3);                                       
        }
        else if(qType[j]==1)
        {                
            view1 = getLayoutInflater().inflate(R.layout.layout3, main_layout,false);
            siz = new LinearLayout.LayoutParams(width, height/3);
        }
        else if(qType[j]==2)
        {           
            view1 = getLayoutInflater().inflate(R.layout.layout4, main_layout,false);
            siz = new LinearLayout.LayoutParams(width, height/3);
        }
        else if(qType[j]==3)
        {           
            view1 = getLayoutInflater().inflate(R.layout.layout5, main_layout,false);
            siz = new LinearLayout.LayoutParams(width, height/2);
        }       

        siz.topMargin = 25;
        main_layout.addView(view1, siz);            
    }
    scroll_layout.addView(main_layout);
    scroll_layout.setBackgroundResource(R.drawable.options_background);     
    setContentView(scroll_layout);  

现在有TextView的每个布局,我想改变它的文本。 如果我通过findviewbyid访问他们,给的setText,只有第一次被改变,我想改变在所有场合TextView的。

    for(int k=0;k<NumberQuestions.length;k++)
    {
        TextView number_title = (TextView)main_layout.findViewById(R.id.number_title);
        TextView mcq_title = (TextView)main_layout.findViewById(R.id.mcq_title);
        TextView comment_title = (TextView)main_layout.findViewById(R.id.comment_title);
        TextView cam_title = (TextView)main_layout.findViewById(R.id.cam_title);
        if(qType[k]==0)
        {               
            number_title.setTypeface(myriadpro_bold);
            number_title.setText(NumberQuestions[k]);

        }
        if(qType[k]==1)
        {
            comment_title.setTypeface(myriadpro_bold);
            comment_title.setText(NumberQuestions[k]);              
        }
        else if(qType[k]==2)
        {
            mcq_title.setTypeface(myriadpro_bold);
            mcq_title.setText(NumberQuestions[k]);              
        }
        else if(qType[k]==3)
        {
            cam_title.setTypeface(myriadpro_bold);
            cam_title.setText(NumberQuestions[k]);              
        }           

请帮忙。

Answer 1:

大概TextView的android: id在所有布局都是一样的,从而解释了方法的行为findViewById总是返回第一次出现



Answer 2:

免责声明:我觉得你是想针对Android框架的工作,而不是与它的工作。 我的建议是大修的一点点位,但我不觉得这是去了解事情的正确方法。

我会建议使用一个ListView,因为你都在重复着相同的格式多次。 一个ListView通常将具有对象的对象的容器,并负责在列表视图中的对象映射到特定行的适配器。 当您更改底层的容器中的数据,你会调用回调notifyDataSetChanged()为您的适配器通知它,你改变了基础数据,并提醒它来更新你的列表视图。

2伟大的资源/从Android开发者网站教程:ListView控件: http://developer.android.com/guide/topics/ui/layout/listview.html适配器: http://developer.android.com/guide/topics/ UI /声明-的layout.html#AdapterViews



Answer 3:

如果我是正确main_layout是在XML命名视图file.So你应该这样使用

 view1 = getLayoutInflater().inflate(R.layout.layout1, main_layout,false);
 TextView tv = (TextView)main_layout.findViewById(R.id.tv1);

其中TV是layout1.xml texview



文章来源: dynamically name textview after inflating android