2014-09-23 85 views
-1
public class MyActivity extends Activity implements ButtonFragement.OnFragmentInteractionListener, TextFragment.OnFragmentInteractionListener,Communicator { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my); 
     ButtonFragement btnfrg=new ButtonFragement(); 
     TextFragment txtfrg= new TextFragment(); 
     FragmentManager fm=getFragmentManager(); 
     FragmentTransaction ft=fm.beginTransaction(); 
     ft.add(R.id.my_activity,btnfrg,"Fragment"); 
     ft.add(R.id.my_activity,txtfrg,"Second Fragment"); 
     ft.commit(); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.my, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onFragmentInteraction(Uri uri) { 

    } 

    @Override 
    public void respond(String data) { 
     FragmentManager fm=getFragmentManager(); 
     TextFragment f1= (TextFragment) fm.findFragmentById(R.id.textfrg); 
     f1.changeText(data); 

    } 
} 

這是我的main_Activity代碼,在這裏,我想在片段發送數據,但它給了我錯誤的f1.changeText(數據)我的項目。基本結構在主Activity上,我創建了兩個片段。一個帶有按鈕,另一個帶有文本。我想顯示使用通信器接口在第二個片段上單擊了多少次按鈕。這裏在「數據」計數器顯示按鈕被點擊了多少次,但我無法通過第二個片段傳輸它。如何從主要活動將數據發送到分段


本程序完成代碼---

public interface Communicator { 
    public void respond(String data); 
} 

TextFragment類別i中加入這種方法----

public void changeText(String data) 
    { 
     txt.setText(data); 
    } 

ButtonFragment類別i添加和修改以下方法

public class ButtonFragement extends Fragment implements View.OnClickListener{ 
    int counter=0; 
    private OnFragmentInteractionListener mListener; 
    Button btn; 
    Communicator comm; 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) 
    { 
     super.onActivityCreated(savedInstanceState); 
     comm= (Communicator) getActivity(); 
     btn= (Button) getActivity().findViewById(R.id.button); 
     btn.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
     counter++; 
     // comm.respond("The button was clicked "+counter+" times"); 
     comm.respond("hi"); 
    } 

在這裏,我剛剛添加了我在程序中添加的內容。我的程序崩潰在... MainActiviy f1.changeText(data); 但爲什麼我沒有得到它。誰能幫我修復這個bug?

回答

2
Bundle bundle = new Bundle(); 
    bundle.putString("key", value); 

    // set Fragmentclass Arguments 

    YourFragment ff= new YourFragment(); 

    ff.setArguments(bundle); 

    transaction.add(R.id.my_activity, ff); 
0

您沒有編號爲的片段。 你是由於某種原因添加兩個片段,編號爲R.id.my_activity。一個標籤爲"Fragment",另一個標籤爲"Second Fragment"。 所以你得到錯誤。 你的想法是可靠的。 這可能是有益的

TextFragment f1= (TextFragment) fm.findFragmentByTag("Second Fragment"); 
+0

感謝您的回覆,但它不會爲我工作。運行後出現以下錯誤。09-23 04:31:36.776 1328-1328/com.example.Ui.multifragementapp D/AndroidRuntime:關閉VM 09-23 04:31:36.796 1328-1328/com.example。 Ui.multifragementapp W/dalvikvm:threadid = 1:線程以未捕獲的異常退出(group = 0xb1a59ba8) 09-23 04:31:37.316 1328-1328/com.example.Ui.multifragementapp E/AndroidRuntime:致命例外:main 過程:com.example.Ui.multifragementapp,PID:1328 java.lang.NullPointerException – 2014-09-23 08:32:36

+0

請問您可以寫更詳細的日誌嗎? – 2014-09-23 12:27:41

+0

在這裏,我添加了我的程序的完整代碼,請通過它並幫助我修復bug。謝謝 – 2014-09-24 09:37:50

1

使用捆綁

從活動:

Bundle bundle = new Bundle(); 
bundle.putString("message", "Hello!"); 
FragmentClass fragInfo = new FragmentClass(); 
fragInfo.setArguments(bundle); 
transaction.replace(R.id.fragment_single, fragInfo); 
transaction.commit(); 

片段:

在片段讀取值

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    String myValue = this.getArguments().getString("message"); 
    ... 
    ... 
} 
0

做到這一點的方法:

  1. 在活動方。

    Fragment fragment = new GridTemplate(); 
        Bundle bundle = new Bundle(); 
        bundle.putInt("index",your value); 
        fragment.setArguments(bundle); 
        FragmentManager fragmentManager = getFragmentManager(); 
         fragmentManager.beginTransaction() 
           .replace(R.id.frame_container, fragment).commit(); 
    

這裏R.id.frame_container是一個框架佈局或相對佈局中,你必須添加的片段。

  1. On Fragment Side。

    int index = getArguments().getInt("index"); 
    

希望這港島線解決您的問題。謝謝

相關問題