2014-12-08 42 views
0

我想從一個EditText文本在XML中獲取文本我有:`如何從EditText上一個片段,而不是活動

這是我的XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ScrollView 
     android:id="@+id/scrollView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@color/background" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginBottom="5dp" 
       android:layout_marginLeft="30dp" 
       android:layout_marginTop="15dp" 
       android:text="Name" 
       android:textColor="@color/accent_red" 
       android:textSize="25sp" /> 

      <EditText 
       android:id="@+id/editContactName" 
       android:layout_width="match_parent" 
       android:layout_height="50dp" 
       android:background="@drawable/border" 
       android:ems="10" 
       android:hint="Name" 
       android:imeOptions="actionNext" 
       android:inputType="textPersonName" 
       android:paddingLeft="30dp" 
       android:paddingRight="30dp" 
       android:textSize="30sp" /> 
     </LinearLayout> 
    </ScrollView> 

</LinearLayout> 

這是我的類歸類SHConfigureContactFragment

public class SHConfigureContactFragment extends Fragment{ 

    private EditText name; 
    private EditText description; 
    private EditText primaryNumber; 
    private EditText secondaryNumber; 
    private EditText email; 
    private EditText skype; 
    private Byte[] photo; 

    private Boolean isDualPane; 
    private FragmentManager fragmentManager; 
    private SHContactMenuFragment menuFragment; 
    private SHConfigureContactFragment contactFragment; 

    private DatabaseControllerLibrary databaseController; 
    private Contact contact; 

    public int selectedIndex; 

    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     if(savedInstanceState != null) { 
      this.selectedIndex = savedInstanceState.getInt("SELECTED_INDEX"); 
      this.contact = (Contact) savedInstanceState.getSerializable("CONTACT"); 
     } 
    } 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     super.onCreateView(inflater, container, savedInstanceState); 
     View rootView = inflater.inflate(R.layout.sh_fragment_contact_edit, container, false); 
     return rootView; 
    } 

    private void setupTextFieldsByContact(Contact contact) { 
     name = (EditText) findViewById(R.id.editContactName); 
//  description = (EditText) findViewById(R.id.editContactDescription); 
//  primaryNumber = (EditText) findViewById(R.id.editContactPrimaryNumber); 
//  secondaryNumber = (EditText) findViewById(R.id.editContactSecondaryNumber); 
//  email = (EditText) findViewById(R.id.editContactEmail); 
//  skype = (EditText) findViewById(R.id.editContactSkype); 

     if (contact != null) { 
      name.setText(contact.getName()); 
      description.setText(contact.getDescription()); 
      primaryNumber.setText(contact.getPrimaryNumber()); 
      secondaryNumber.setText(contact.getSecondaryNumber()); 
      email.setText(contact.getEmail()); 
      skype.setText(contact.getSkype()); 
     } 
    } 


} 

它好像我不能callfindViewById(R.id.editContactName)因爲我不延長的活動。我在這裏看過各種帖子,但還沒有找到解決方案。我想過使用getText()方法,但這並不能讓我得到具體的EditText元素。我希望有許多可編輯的字段,這就是爲什麼我需要通過特定ID來獲得

回答

1

onCreateView方法,這樣做:

name = (EditText) rootView.findViewById(R.id.editContactName); 

希望它將有助於解決您的問題。

+0

究竟是什麼'rootView',你如何訪問它? – jfmg 2015-11-24 11:02:33

3

您可以通過調用getView()來訪問在onCreateView(...)中膨脹的視圖。您可以onCreateView(...)後,可隨時使用下面的代碼:

getView().findViewById(R.id.editContactName) 

這裏是我會的片段裏面做:

EditText mName, mDescription, mPrimaryNumber, mSecondaryNumber, mEmail, mSkype; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // no need for super here, the default fragment has no layout 
    // inflate the layout in this method 
    View rootView = inflater.inflate(R.layout.sh_fragment_contact_edit, container, false); 
    return rootView; 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    // save views as variables in this method 
    // "view" is the one returned from onCreateView 
    mName = (EditText) view.findViewById(R.id.editContactName); 
    mDdescription = (EditText) view.findViewById(R.id.editContactDescription); 
    mPrimaryNumber = (EditText) view.findViewById(R.id.editContactPrimaryNumber); 
    mSecondaryNumber = (EditText) view.findViewById(R.id.editContactSecondaryNumber); 
    emEail = (EditText) view.findViewById(R.id.editContactEmail); 
    mSkype = (EditText) view.findViewById(R.id.editContactSkype); 
} 

private void setupTextFieldsByContact(Contact contact) { 
    // call this method anytime the contact changes without having to find views again 
    if (contact != null) { 
     mName.setText(contact.getName()); 
     mDescription.setText(contact.getDescription()); 
     mPrimaryNumber.setText(contact.getPrimaryNumber()); 
     mSecondaryNumber.setText(contact.getSecondaryNumber()); 
     mEmail.setText(contact.getEmail()); 
     mSkype.setText(contact.getSkype()); 
    } 
} 
相關問題