在给android充气后动态命名textview

时间:2013-03-20 17:34:44

标签: android android-layout scrollview layout-inflater

我在滚动视图中多次充气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]);              
        }           

请帮忙。

3 个答案:

答案 0 :(得分:0)

免责声明:我觉得您正在努力反对Android框架,而不是使用它。我的建议有点大修,但我觉得这是正确的做事方式。

我建议使用ListView,因为您多次重复相同的格式。列表视图通常具有对象对象的容器,以及负责将对象映射到列表视图中的特定行的适配器。当您更改基础容器中的数据时,您将调用适配器的回调notifyDataSetChanged()以通知它您已更改基础数据并提醒它更新列表视图。

来自android开发者网站的2个很棒的资源/教程: ListView:http://developer.android.com/guide/topics/ui/layout/listview.html 适配器:http://developer.android.com/guide/topics/ui/declaring-layout.html#AdapterViews

答案 1 :(得分:0)

可能所有布局中的TextView android: id都是相同的,因此解释了方法的行为,findViewById总是返回第一次出现

答案 2 :(得分:0)

如果我是对的,main_layout是xml文件中的名称视图。所以你应该这样使用

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

其中tv是layout1.xml中的texview