2013-10-03 1 views
1

(Раскрыты) - Удалены PARAMS макета на каждом представлении ---Как добавить элементы в таблицу из EditTexts в Android?

Я новичок в Android, и я пытаюсь добавить строки в TableLayout из элементов, которые я введенными в текстовых полях.

(Edited) Вот мой макет для этого фрагмента:

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:tag="contacts"> 

    <LinearLayout android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:scrollbars="vertical"> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:inputType="textPersonName" 
      android:ems="10" 
      android:id="@+id/contactName" 
      android:hint="Name" 
      android:paddingTop="5dip" /> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:id="@+id/contactRelationship" 
      android:hint="Relationship" 
      android:paddingTop="5dip" /> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:inputType="textPostalAddress" 
      android:ems="10" 
      android:id="@+id/contactAddress" 
      android:hint="Address" 
      android:paddingTop="5dip" /> 

     <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 

      <EditText 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:inputType="phone" 
       android:ems="10" 
       android:id="@+id/contactPhoneNo" 
       android:hint="Phone Number" 
       android:paddingTop="5dip" /> 

      <Spinner 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/contactPhoneTypeSpinner" 
       android:layout_toEndOf="@+id/contactPhoneNo" 
       android:layout_toRightOf="@+id/contactPhoneNo" 
       android:paddingTop="5dip" /> 
     </RelativeLayout> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="107dp" 
      android:inputType="textMultiLine" 
      android:ems="10" 
      android:id="@+id/contactSpecialNotes" 
      android:paddingTop="5dip" 
      android:hint="Write special notes here" /> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Add Contact" 
      android:id="@+id/addContact" /> 

     <TableLayout 
      android:id="@+id/contactsTableLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:paddingTop="5dip"></TableLayout> 
    </LinearLayout> 
</ScrollView> 

(Edited) Вот код для этого фрагмента:

public static class ContactsFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_section_contacts, 
       container, false); 
     return rootView; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 


     Spinner phoneTypeSpinner = (Spinner) this.getView().findViewById(R.id.contactPhoneTypeSpinner); 
     Button contactButton = (Button) this.getView().findViewById(R.id.addContact); 
     final TableLayout tableLayout = (TableLayout) this.getView().findViewById(R.id.contactsTableLayout); 
     final EditText txtContactName = (EditText) this.getView().findViewById(R.id.contactName); 
     final EditText txtContactRelationship = (EditText) this.getView().findViewById(R.id.contactRelationship); 
     final EditText txtContactAddress = (EditText) this.getView().findViewById(R.id.contactAddress); 
     final EditText txtContactPhoneNo = (EditText) this.getView().findViewById(R.id.contactPhoneNo); 
     Spinner contactPhoneTypeSpinner = (Spinner) this.getView().findViewById(R.id.contactPhoneTypeSpinner); 

     EmployeeDataSource datasource = new EmployeeDataSource(getActivity()); 
     datasource.open(); 

     //--- Gender Spinner --- 
     List<PhoneType> list = datasource.getPhoneTypeList(); 
     ArrayAdapter<PhoneType> adapter = new ArrayAdapter<PhoneType>(getActivity(), 
       android.R.layout.simple_spinner_item, list); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     phoneTypeSpinner.setAdapter(adapter); 

     phoneTypeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

      } 

      public void onNothingSelected(AdapterView<?> parent) { 
      } 
     }); 

     contactButton.setOnClickListener(new View.OnClickListener() { 
      int rowId = 0; 
      @Override 
      public void onClick(View v) { 

       TableRow tableRow = new TableRow(getActivity().getApplicationContext()); 
       tableRow.setId(rowId++); 
       tableRow.setLayoutParams(new ViewGroup.LayoutParams(
         ViewGroup.LayoutParams.FILL_PARENT, 
         ViewGroup.LayoutParams.WRAP_CONTENT)); 

       TextView tvContactName = new TextView(getActivity().getApplicationContext()); 
       tvContactName.setText(txtContactName.getText().toString()); 
       tvContactName.setLayoutParams(new ViewGroup.LayoutParams(
         ViewGroup.LayoutParams.FILL_PARENT, 
         ViewGroup.LayoutParams.WRAP_CONTENT)); 
       tableRow.addView(tvContactName); 

       TextView tvRelationship = new TextView(getActivity().getApplicationContext()); 
       tvRelationship.setText(txtContactRelationship.getText().toString()); 
       //tvRelationship.setLayoutParams(new ViewGroup.LayoutParams(
       //  ViewGroup.LayoutParams.FILL_PARENT, 
       //  ViewGroup.LayoutParams.WRAP_CONTENT)); 
       tableRow.addView(tvRelationship); 

       TextView tvContactNo = new TextView(getActivity().getApplicationContext()); 
       tvContactNo.setText(txtContactPhoneNo.getText().toString()); 
       //tvContactNo.setLayoutParams(new ViewGroup.LayoutParams(
       //  ViewGroup.LayoutParams.FILL_PARENT, 
       //  ViewGroup.LayoutParams.WRAP_CONTENT)); 
       tableRow.addView(tvContactNo); 

       tableLayout.addView(tableRow, new TableLayout.LayoutParams(
         ViewGroup.LayoutParams.FILL_PARENT, 
         ViewGroup.LayoutParams.WRAP_CONTENT)); 
      } 
     }); 
    } 
} 

я мог видеть в отладчике, что значения из моих просмотров были добавлены в мой tableRow, но я не вижу, что таблица появляется на моем экране, что мне не хватает или что-то не так?

Любая помощь была бы принята с благодарностью.

Спасибо!

+0

Попробуйте перезагрузить/обновить tableLayout, когда вы отправляете текстовые значения. – Yup

+0

Я вызвал tableLayout.invalidate() и tableLayout.refreshDrawableState() после добавления tableRow в tableLayout, но ничего не сделал. (если это то, что вы предлагаете) – shifter

ответ

0

Я думаю, высота экрана увеличена. Попробуйте использовать Scrollview поверх этого макета.

+0

Я использовал ScrollView поверх своего макета – shifter

0

Я думаю, что вы должны изменить RelativeLayout свойство android:height="wrap_content" вместо android:height="fill_parent", а также сделать для TableLayout

Может эта работа для вас ...

Попробуйте это: Отредактировано:

public static class ContactsFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_section_contacts, 
       container, false); 

      Spinner phoneTypeSpinner = (Spinner) rootView.findViewById(R.id.contactPhoneTypeSpinner); 
      Button contactButton = (Button) rootView.findViewById(R.id.addContact); 
      final TableLayout tableLayout = (TableLayout) rootView.findViewById(R.id.contactsTableLayout); 
      final EditText txtContactName = (EditText) rootView.findViewById(R.id.contactName); 
      final EditText txtContactRelationship = (EditText) rootView.findViewById(R.id.contactRelationship); 
      final EditText txtContactAddress = (EditText) rootView.findViewById(R.id.contactAddress); 
      final EditText txtContactPhoneNo = (EditText) rootView.findViewById(R.id.contactPhoneNo); 
      Spinner contactPhoneTypeSpinner = (Spinner) rootView.findViewById(R.id.contactPhoneTypeSpinner); 

      EmployeeDataSource datasource = new EmployeeDataSource(getActivity()); 
      datasource.open(); 

      //--- Gender Spinner --- 
      List<PhoneType> list = datasource.getPhoneTypeList(); 
      ArrayAdapter<PhoneType> adapter = new ArrayAdapter<PhoneType>(getActivity(), 
        android.R.layout.simple_spinner_item, list); 
      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      phoneTypeSpinner.setAdapter(adapter); 

      phoneTypeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

       } 

       public void onNothingSelected(AdapterView<?> parent) { 
       } 
      }); 

      contactButton.setOnClickListener(new View.OnClickListener() { 
       int rowId = 0; 
       @Override 
       public void onClick(View v) { 

        TableRow tableRow = new TableRow(getActivity().getApplicationContext()); 
        tableRow.setId(rowId++); 

        TextView tvContactName = new TextView(getActivity().getApplicationContext()); 
        tvContactName.setText(txtContactName.getText().toString()); 

        tableRow.addView(tvContactName); 

        TextView tvRelationship = new TextView(getActivity().getApplicationContext()); 
        tvRelationship.setText(txtContactRelationship.getText().toString()); 

        tableRow.addView(tvRelationship); 

        TextView tvContactNo = new TextView(getActivity().getApplicationContext()); 
        tvContactNo.setText(txtContactPhoneNo.getText().toString()); 

        tableRow.addView(tvContactNo); 

        tableLayout.addView(tableRow, new TableLayout.LayoutParams(
          ViewGroup.LayoutParams.FILL_PARENT, 
          ViewGroup.LayoutParams.WRAP_CONTENT)); 
       } 
      }); 

      return rootView; 
     } 

     @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 



     } 
    } 
+0

, к сожалению, нет .. Я также скорректировал высоту других макетов внутри моего xml, но безрезультатно – shifter

+0

Я обновил свой ответ новыми java-файл, см. это. –

+0

Я попробовал то, что вы здесь сделали, но то же самое ... – shifter