我希望能够使用layout_name.addView(CUSTOM VIEW CLASS INSTANCE)将自定义视图类添加到特定布局,或将它们添加到列表视图。无法添加自定义视图类
我打算以编程方式添加许多这些视图,并希望能够获得每个视图单独编辑文本/ spinners等的值。
当我尝试添加此自定义视图时,不会出现任何内容,第二次添加视图时也会收到此错误。
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:3577)
at android.view.ViewGroup.addView(ViewGroup.java:3430)
at android.view.ViewGroup.addView(ViewGroup.java:3375)
at android.view.ViewGroup.addView(ViewGroup.java:3351)
at com.modup.fragment.CreateFragment.onClick(CreateFragment.java:192)
at android.view.View.performClick(View.java:4442)
at android.view.View$PerformClick.run(View.java:18473)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
我能做些什么来添加此WorkoutView了特定布局,到LinearLayout中,其是与()使用的setContentView原始布局充气的视图的一部分?
UPDATE:
我试图插入这种观点,根据需要多次成被容纳在其中膨胀的视图是的setContentView父布局的布局()。
R.id.create_fragment_layout(原中使用的setContentView())
R.id.workout_layout(在create_fragment_layout内)
我想自定义视图插入到这个布局,而这个自定义视图需要有自己的R.id.somename_layout,里面有很多元素。
WorkoutView(自定义类)
public class WorkoutView extends LinearLayout implements View.OnClickListener {
int res_id;
public Spinner spinnerDifficulty, spinnerTime, spinnerMuscleGroup, spinnerSets, spinnerReps;
public EditText etWorkoutName;
public Button btnRemoveWorkout;
String workoutName, muscleGroup, sets, reps;
LayoutInflater inflater;
public WorkoutView(Context context) {
super(context);
}
public WorkoutView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public WorkoutView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void init() {
inflate(getContext(), R.layout.single_workout_layout, this);
spinnerDifficulty = (Spinner) findViewById(R.id.spinnerDifficulty);
spinnerReps = (Spinner) findViewById(R.id.spinnerReps);
spinnerSets = (Spinner) findViewById(R.id.spinnerSets);
spinnerMuscleGroup = (Spinner) findViewById(R.id.spinnerWorkoutGroup);
spinnerTime = (Spinner) findViewById(R.id.spinnerTime);
etWorkoutName = (EditText) findViewById(R.id.etWorkoutName);
btnRemoveWorkout = (Button) findViewById(R.id.btnRemoveWorkout);
btnRemoveWorkout.setOnClickListener(this);
}
public String getReps() {
reps = spinnerReps.getSelectedItem().toString();
return reps;
}
public String getWorkoutName() {
workoutName = etWorkoutName.getText().toString().trim();
return workoutName;
}
public String getMuscleGroup() {
muscleGroup = spinnerMuscleGroup.getSelectedItem().toString();
return muscleGroup;
}
public String getSets() {
sets = spinnerSets.getSelectedItem().toString();
return sets;
}
public SingleWorkout getAll() {
//to be designed
return null;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnRemoveWorkout:
Log.e("DID THIS WORK?", "BUTTON PRESSED");
break;
}
}
}
我是如何创建视图
workoutView = new WorkoutView(getActivity());
如何,我添加视图到的LinearLayout
workoutLayout.addView(workoutView);
java.lang。IllegalStateException:指定的子项已具有 父级。您必须先调用子对象的父对象的removeView()。 平均workoutView已被添加到另一个视图。 – cxphong 2015-03-03 04:28:13