如何从膨胀的布局中获取视图的引用

时间:2015-09-03 11:50:09

标签: android android-tablelayout layout-inflater

我使用setContentView()为我的活动设置了一个庞大的布局。在该布局中,我想要填充TableLayout(在我的活动中命名为tableLayout)。 TableLayout的行是布局文件中的customViews(让我们调用该文件tablerow_layout.xml)。在这个布局中我有一些TextViews和ImageView。我想要做的是在创建行时以编程方式更改TextView的内容。这是我的代码:

LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View newRow = layoutInflater.inflate(R.layout.tablerow_layout, null, false);
TextView name = (TextView) newRow. findViewById(R.id.tablerow_name);
name.setText("THIS LINE");
tableLayout.addView(newRow);

不幸的是,当我尝试更改TextView的内容时,我的应用程序崩溃了。我知道我可以使用ListView执行此操作,但我通常只有少量行,而为ListView创建另一个适配器的开销很大。

正如@ρяσѕρєяK建议我也试过newRow.findViewById(...)而不是findViewById(...)没有任何区别

4 个答案:

答案 0 :(得分:3)

  

如何从膨胀的布局中获取视图的引用

使用从View方法返回的LayoutInflater.inflate对象来访问布局中的视图,该视图作为第一个参数传递给inflate方法。

在您的情况下,使用newRow对象来访问R.layout.tablerow_layout布局中的视图:

TextView name = (TextView)newRow.findViewById(R.id.tablerow_name); 

答案 1 :(得分:3)

  try

   {
   LayoutInflater layoutInflater = (LayoutInflater)   
   getSystemService(Context.LAYOUT_INFLATER_SERVICE);

     View newRow = layoutInflater.inflate(R.layout.tablerow_layout, null,   false);
     TextView name = (TextView) newRow.findViewById(R.id.tablerow_name);

     name.setText("THIS LINE");

    tableLayout.addView(newRow);

    }catch(Exception e)

    {

    e.printTracktrace();

    }

答案 2 :(得分:2)

您错过了在 Textview 中设置newRow

  View newRow = layoutInflater.inflate(R.layout.tablerow_layout, null, false);
  TextView name = (TextView)newRow.findViewById(R.id.tablerow_name);

答案 3 :(得分:1)

使用IntelliJ Amiya和ρяσѕρєяK的答案,这对我的代码有用。

LayoutInflater inflater = LayoutInflater.from(this);
    LinearLayout linearLayout = 
(LinearLayout)findViewById(R.id.profileView);
    ViewGroup viewGroup = linearLayout;

    for (int i = 0; i < NUM_OF_PROFILES; i++){

        LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.profile_badge_layout, viewGroup, false);
        linearLayout.addView(layout);

        TextView names = (TextView)layout.findViewById(R.id.profileName);
        ImageView images = (ImageView)layout.findViewById(R.id.profileImage);

        names.setText(""+i);


        viewGroup = layout;
    }

每个文本都有自己的价值。我相信你需要先添加视图。然后你可以改变值