动态添加元素到已创建的relativelayout

时间:2015-06-01 17:53:01

标签: android android-layout listview relativelayout

在我的片段中,我希望listview中的每个自定义项看起来如下:

名称

SetsXReps

[] [] [] [] [] --->文本视图数组

[] [] [] [] [] --->复选框数组

textview和复选框的数量取决于适配器中的项目,因此我需要动态创建该部分。我无法动态地将这些元素添加到我在xml中部分定义的relativelayout。这是我的片段类,后跟我的自定义列表项的xml。布局的id是list_item_exercise_in_workout。

公共类WorkoutFragment扩展了Fragment     {         public static final String EXTRA_ALREADYCREATED_ID =" shake2lift.nickdelnano.com";

    private ExAdapter adapter;
    private ListView listView;
    private ArrayList<Set> sets;
    private Workout w;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        UUID workoutId = (UUID) getArguments().getSerializable(EXTRA_ALREADYCREATED_ID);
        w = WorkoutMASTER.get(getActivity()).getWorkout(workoutId);

    }


    public View onCreateView(LayoutInflater inflater, ViewGroup parent,Bundle savedInstanceState)
    {
        View v = inflater.inflate(R.layout.fragment_workout, parent, false);

        adapter = new ExAdapter(getActivity(), R.layout.fragment_create_workout, R.id.list, sets);
        listView.setAdapter(adapter);

        return v;

    }
    public static WorkoutFragment newInstance(UUID workoutId)
    {
        Bundle args = new Bundle();
        args.putSerializable(EXTRA_ALREADYCREATED_ID, workoutId);
        WorkoutFragment fragment = new WorkoutFragment();
        fragment.setArguments(args);

        return fragment;
    }

    private class ExAdapter extends ArrayAdapter<Set>
    {
        public ExAdapter(Context c, int resource, int textViewResourceId, ArrayList<Set> sets ) {
            super(c, 0, sets);
        }

        public View getView(final int position, View convertView, ViewGroup parent)
        {

            //if we werent given a view, inflate one
            if(convertView == null)
            {
                convertView = getActivity().getLayoutInflater().inflate(R.layout.list_item_exercise_in_workout, null);

            }
            Set s = getItem(position);

            //RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
              //      RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT );

            TextView name = (TextView) convertView.findViewById(R.id.exName);
            name.setText(s.getName());
            TextView setsReps = (TextView) convertView.findViewById(R.id.setsXreps);
            setsReps.setText(s.getSets() + "X" + s.getReps());

            CheckBox[] checkBoxes = new CheckBox[s.getSetsInt()];
            EditText[] weightBoxes = new EditText[s.getSetsInt()];
            //initialize weightBoxes's text to the inputted weight
            for(int i = 0; i < weightBoxes.length; i++)
            {
               //code to add dynamically here
            }

            return convertView;
        }
    }


}

和我的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/relativeLayoutEx"
   >
         <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Name"
        android:id="@+id/exName"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="SetsXReps"
    android:id="@+id/setsXreps"
    android:layout_below="@id/exName"
    android:layout_alignParentLeft="true"
   />
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Button"
    android:id="@+id/button2"
    android:layout_below="@+id/setsXreps"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="112dp" />

我感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

你需要先得到一个指向你的RelativeLayout的指针

RelativeLayout container = (RelativeLayout) view.findViewById(R.id.relativeLayoutEx);

然后在for循环中,动态创建文本框(和复选框)并将它们添加到布局中:

TextView text = new TextView(getActivity());
text.setText("Hello");
container.addView(text);