2014-09-23 89 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"); 
    

希望这港岛线解决您的问题。谢谢

相关问题