指定的孩子已经有父母。你必须先调用孩子的父母的removeView() - 当动态添加按钮时得到这个错误
问题描述:
我有一个应用程序,我动态地添加列表中的朋友数量的按钮。我可以添加1个朋友并查看好友列表。但是,当我添加第二个朋友并尝试查看FriendList时出现此错误 -指定的孩子已经有父母。你必须先调用孩子的父母的removeView() - 当动态添加按钮时得到这个错误
指定的子项已具有父项。你必须调用removeView() 孩子的父母第一
这里是我的代码 -
public class FriendsList extends AppCompatActivity implements View.OnClickListener {
@SuppressWarnings("ResourceType")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_friends_list);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
createButtons();
}
private void createButtons() {
int size = FriendSearch.allFriends.size();
for (int i = 0; i <= size - 1; i++) {
LinearLayout layout = (LinearLayout) findViewById(R.id.content_friends_list);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.WRAP_CONTENT);
layout.setOrientation(LinearLayout.VERTICAL);
Button btn = new Button(this);
for (int j = 0; j <= size - 1; j++) {
String name = FriendSearch.allFriends.get(j).getUserName();
btn.setText(name);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//goes to this friend's profile page
FriendSearch.setIsFriend(true);
startActivity(new Intent(FriendsList.this, Profile.class));
}
});
layout.addView(btn);
}
}
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_friends_list, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId()){
case R.id.addFriendOption:
startActivity(new Intent(this, FriendSearch.class));
break;
case R.id.myProfileOption:
FriendSearch.setIsFriend(false);
startActivity(new Intent(this, Profile.class));
break;
case android.R.id.home:
NavUtils.navigateUpTo(this, getIntent());
return true;
}
return true;
}
@Override
public void onClick(View v) {
}
}
我觉得要我清楚当页面再次调用,所以所有的视图可以添加按钮。但在我尝试过的每一种方式中,我都会遇到错误或空白的活动。
答
上移:
Button btn = new Button(this);
是里面您for (int j = 0; j <= size - 1; j++)
循环,或移动:
layout.addView(btn);
是外您for (int j = 0; j <= size - 1; j++)
循环。
就像现在这样,您正在试图添加几次相同的Button
,每次循环都会执行一次。
谢谢,这解决了崩溃问题。我做了第一个建议,它给了我每个user1 user2 user1 user2的2个按钮。他们都去了user2个人资料。第二个建议给了我适当数量的按钮,但他们是为同一个用户。 – zmace
但我认为这与我的代码的其他部分有关。 – zmace