原因:java.lang.IllegalStateException:指定的子级已具有父级。必须首先对子级的父级调用removeView()
伙计们,我遇到了一个错误,我不知道如何解决它,请帮助我 这是我的密码:原因:java.lang.IllegalStateException:指定的子级已具有父级。必须首先对子级的父级调用removeView(),java,android,view,parent,Java,Android,View,Parent,伙计们,我遇到了一个错误,我不知道如何解决它,请帮助我 这是我的密码: package com.appschool.www.projectphase1516; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.view.Menu; import android.
package com.appschool.www.projectphase1516;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;
import com.appschool.www.projectphase1516.R;
import org.w3c.dom.Text;
public class AccountlistActivity extends Activity implements View.OnClickListener {
LinearLayout horiz;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_accountlist);
horiz = (LinearLayout) findViewById(R.id.linearlayouthere);
Accountlistcreator();
setContentView(horiz);
}
public void Accountlistcreator(){
SharedPreferences sp = getSharedPreferences("details",1);
int numofaccounts = sp.getInt("numofaccouns",0);
horiz.removeAllViews();
for(int i=0;i<=numofaccounts;i++) {
TextView titleaccount = new TextView(this);
titleaccount.setText(sp.getString("accountTitle" + i, ""));
titleaccount.setTextSize(20);
horiz.addView(titleaccount);
Button seeaccount = new Button(this);
seeaccount.setText("See Details");
seeaccount.setId(i);
seeaccount.setLayoutParams(new FrameLayout.LayoutParams(200,100));
seeaccount.setOnClickListener(this);
horiz.addView(seeaccount);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.accountlist, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View view) {
SharedPreferences sp = getSharedPreferences("details",1);
int num = sp.getInt("numofaccouns",0);
for(int x=0;x<=num;x++){
if(view.getId()==x){
Intent myaccount = new Intent(AccountlistActivity.this,MyaccountActivity.class);
myaccount.putExtra("numbtn",x);
startActivity(myaccount);
}
}
}
}
请帮帮我,伙计们
代码应该创建特定数量的按钮和文本视图
每次我去参加那个活动时,我都试图删除并重新创建它们,但我不确定为什么会不断出现错误:[
编辑:
谢谢,它现在运行,但还有一个问题
它不会创建超过1个文本视图和一个按钮,我不知道为什么
我对java开发相当陌生,所以我不知道上面的评论之类的复杂特性我只是在做作业:p删除
setContentView(horiz);
horiz已经是活动内容视图的一部分。您的方法是错误的,您希望通过创建多个文本视图来显示信息,从而用大量信息填充布局,您需要的是一个列表视图和一个自定义列表适配器,这样您就可以从共享首选项信息中获取您将保存在列表中的信息,然后将其传递给适配器,这样适配器就可以构建您想要的所有视图,并且比您的方法做得更好、更简单。第一个答案:horiz已经有了父级,它已经是您设置的contentview的一部分。删除setContentViewhoriz 回答你的第二个问题:
SharedPreferences sp = getSharedPreferences("details",1);
int numofaccounts = sp.getInt("numofaccouns",0);
这意味着您可以使用条目NoMoFoCAMS获得SysDype细节。但是,因为您从来没有保存它。您只得到一个不存在的条目,如果没有该条目,则默认为0。FoLoLe初始化为int i=0;由JavaLang.ILLealStaleExeExt引起:指定的子已经有PAR。您必须首先在子级的父级上调用removeView。在android.view.ViewGroup.addViewInnerViewGroup.java:3562I,我建议使用以下方法创建UI,而不是从代码中将其组合在一起:
SharedPreferences sp = getSharedPreferences("details",1);
int numofaccounts = sp.getInt("numofaccouns",0);
final String SHARED_PREFS = "details";
final String NUMBER_OF_ACCOUNTS = "numberOfAccounts";
final int NUMBER_OF_ACCOUNTS_DEFAULT = 10;
int numberOfAccounts = 75;
//to save into sharedpreferences:
getSharedPreferences(SHARED_PREFS, MODE_PRIVATE).edit().put(NUMBER_OF_ACCOUNTS, numberOfAccounts).commit();
//to retrieve that value:
numberOfAccounts = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE).getInt(NUMBER_OF_ACCOUNTS, NUMBER_OF_ACCOUNTS_DEFAULT);