我尝试创建一个用于保存图像的按钮列表,在该按钮下方会有一个文本。这就是为什么我创建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
答案 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);