2015-06-13 75 views
-1

我有兩個帶edittext的片段,我從第一個edittext獲取數據,但在調用第二個片段後,我無法從第二個片段的edittext獲取數據。 Logcat說我從第二個edittext的數據是無效的。我無法從片段中的edittext中獲取數據,我替換片段後

這是一個第一片段的類

package com.example.n; 

import android.annotation.TargetApi; 
import android.app.Fragment; 
import android.os.Build; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.EditText; 


@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public class FragmentAdd extends Fragment { 
    EditText et1; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.frag_add, container, false); 
      et1 = (EditText) rootView.findViewById(R.id.editText); 
      return rootView ; 
     } 

} 

這是一個第二片段類

package com.example.n; 

import android.annotation.TargetApi; 
import android.app.Fragment; 
import android.os.Build; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.EditText; 


@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public class FragmentAdd2 extends Fragment { 
    EditText et2; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.frag_add2, container, false); 
     et2 = (EditText) rootView.findViewById(R.id.editText2); 

     return rootView ; 
    } 

    public String getEditText(){ 
     /*FragmentAdd2 fragmentAdd3 = new FragmentAdd2(); 
     String data = fragmentAdd3.et2.getText().toString();*/ 
     String data = et2.getText().toString(); 
     return data; 
    } 

} 

這是主類的一部分

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    public void onClick(View view){ 
    FragmentAdd fragmentAdd = new FragmentAdd(); 
    String data = fragmentAdd.et1.getText().toString(); 
} 

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    public void onClick(View view){ 
    FragmentAdd2 fragmentAdd2 = new FragmentAdd2(); 
    String data = fragmentAdd2.et2.getText().toString(); 
} 

*LogCat* 


java.lang.IllegalStateException: Could not execute method of the activity 
Caused by: java.lang.reflect.InvocationTargetException 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference 
+0

你看Android並不是你的日常java,它的煩人。你的editText沒有被初始化,因爲視圖沒有被轉換爲XML,**爲什麼因爲**你需要讓android創建你的片段,重新搜索片段transanctions Sir,honeycode, – Elltz

+0

我不明白我是什麼必須做的,我的方法創建的片段事務,但我不顯示在此頁面中。爲什麼我顯示我的片段交易,我成功地將我的片段替換爲第二個片段。但在第二個片段中訪問我的edittext我不明白。 – honeycode

回答

0
FragmentAdd2 fragmentAdd2 = new FragmentAdd2(); //new fragment instance 
String data = fragmentAdd2.et2.getText().toString(); 

以上幾點到不同Fragment的代碼,如果你想從文本的Fragment你需要指向你加入交易的Fragment,這將擺脫NPE讓你Fragment您可以使用TagFragmentManager

假設當你添加的片段使用Transaction.add(int,Fragment,tag) 你可以用後FragmentManager.findFragmentByTag(tag),因爲你希望你的EditText,你可以將它轉換爲您的首選Fragment現在打電話給你的片段Class .ie。 FragmentAdd2FragmentAdd然後你可以檢索你的東西。

希望它可以幫助

1

從活動訪問片段的方法正確的方法是

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); 
fragment.methodName(); 

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag("Your Tag"); 
fragment.methodName(); 

「您的標記」是您在參數中傳遞的標籤當你添加或替換Fragment