如何将布局添加到另一个视图

时间:2015-12-14 17:13:23

标签: java android xml android-layout view

我尝试创建一个用于保存图像的按钮列表,在该按钮下方会有一个文本。这就是为什么我创建friend_button.xml创建按钮和文本作为组件的原因,这样我就可以将这个组件相乘并更改每个乘法中的特征。但不幸的是,当它试图将视图添加到布局时(或者反过来将布局添加到视图中)时,它给出了一个错误,即rootView已经有了父视图。我试图找到父母(使用该代码" rootView.getParent().getClass().getName().toString()")并且它说" android.support.design.widget.CoordinatorLayout"是父母。我不知道CoordinatorLayout是否是它的父级,我试图从那个父级删除我的rootView,所以我可以将它添加到我的布局,但我无法做到。我的问题是,这是我正在做的事情的正确方法吗,如果是的话,我面临的问题是什么?

public class FriendsList extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
  SharedPreferences settings;
  String token;
  String fname,lname;
  ArrayList<JsonObject> friendsJsonObjects = new ArrayList<JsonObject>();
  ArrayList<String> friends = new ArrayList<String>();
  RelativeLayout main;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    int i;

    settings = getSharedPreferences("vacaYouSettings", 0);
    token = settings.getString("access_key", "");
    /*getAllFriends() gets friends adds the name of the friends to friends arraylist*/
    getAllFriends();

    setContentView(R.layout.activity_friends_list);
    main = (RelativeLayout) findViewById(R.id.mainLayout);

    ImageButton[] friendImage = new ImageButton[friends.size()];
    TextView[] friendName = new TextView[friends.size()];

    LayoutInflater inflater = getLayoutInflater();
    View rootView = inflater.inflate(R.layout.friend_button, main);

    Log.d("viev",rootView.getParent().getClass().getName().toString());

        for (i = 0; i < friends.size(); i++) {


            friendImage[i] = (ImageButton) rootView.findViewById(R.id.imageButton);
            friendName[i] = (TextView) rootView.findViewById(R.id.textView2);
            friendName[i].setId(i);
            friendImage[i].setId(i);
            friendName[i].setText(friends.get(i));
            friendName[i].setText("deneme");
            main.addView(rootView);
        }


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);'

我无法复制我的xml代码。我只是截取屏幕截图,以便您可以看到mainLayout(实际名称是content_friends_list.xml)和friend_button.xml

friend_button.xml

mainLayout

1 个答案:

答案 0 :(得分:0)

方法签名是

inflate(int resource, ViewGroup root, boolean attachToRoot)

在对视图进行充气时,请将attachToRoot设置为 false

View rootView = inflater.inflate(R.layout.friend_button, main, false);

这样,rootView在实例化时不会自动生成父项,并且您以后可以添加它。

修改

您也可以尝试以编程方式执行所有操作。

所以,你会有这样的事情:

for (i = 0; i < friends.size(); i++) {

    LinearLayout currentLayout = new LinearLayout(context);
    ImageButton currentImageButton = new ImageButton(context);
    TextView currentTextView = new TextView(context);
    currentTextView.setText("....");

    currentLayout.addView(currentImageButton)
    currentLayout.addView(currentTextView);

    main.addView(currentLayout);
}

并删除这些行:

LayoutInflater inflater = getLayoutInflater();
View rootView = inflater.inflate(R.layout.friend_button, main);