2017-03-20 60 views
0

有一個活動包含一個Button和一個LinerLayout,它是Fragment的容器。 Fragment的佈局只包含一個TextView。我想發送一個字符串到活動片段,但收到的片段是空的。爲什麼?活動發送數據到片段,但接收到的片段爲空

XML活動的:

<Button 
     android:id="@+id/load" 
     android:layout_width="match_parent" 
     android:layout_height="80dp" 
     android:text="load" /> 

    <!--the container of fragment--> 
    <LinearLayout 
     android:id="@+id/container" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" /> 

片段的XML:

<TextView 
     android:id="@+id/fragment_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
活性

Java代碼:

public class DynamicFragmentActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dynamic_fragment); 

     findViewById(R.id.load).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       //create fragment and set data 
       MyFragment myFragment = new MyFragment(); 
       Bundle bundle = new Bundle(); 
       bundle.putString("text", "demo"); 
       myFragment.setArguments(bundle); 

       //commit 
       FragmentManager fragmentManager = getFragmentManager(); 
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
       fragmentTransaction.add(R.id.container, myFragment); 
       fragmentTransaction.commit(); 

      } 
     }); 
    } 
} 

片段的Java代碼:

public class MyFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.myfragment, container, false); 
     TextView textView = (TextView) view.findViewById(R.id.fragment_text); 

     //receive data 
     String text = getArguments().getBundle("text")+""; 
     textView.setText(text); 

     return view; 
    } 
} 

回答

0

試試這個,希望它可以幫助...........

public class MyFragment extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.myfragment, container, false); 
    TextView textView = (TextView) view.findViewById(R.id.fragment_text); 

    //change getBundle() to getString() 
    String text = getArguments().getString("text")+""; 
    textView.setText(text); 

    return view; 
} 
} 
+0

非常感謝。這是一個很大的幫助。我只是試圖改變getBundle()來獲得(),這也沒關係。 –

+0

使用getString(),所以你可以得到它作爲字符串,並將其設置爲textView.setText(文本); 。請接受答案,如果它可以幫助你,謝謝。 –

0

你現在正在做的是得到一個包叫做文本,你真正想要的是得到束中的字符串:

Bundle arg = getArguments(); 
String txt = arg.getString("text"); 
相關問題