问题描述
我是新来的Android,并试图了解我自己。但我有一个艰难的时间片段。我创建了一个简单的应用程序来学习片段。我觉得它可能看起来很傻,但我真的不能得到这个工作。
I am new to Android and trying to learn on my own. But I am having a tough time with Fragments. I am creating a simple application to learn fragments. I think it may seem silly but I really can't get this to work.
我想要做的是一个按钮(buttonSayHi)在Fragment_One的点击,Fragment_One应Fragment_Two更换。
All I want to do is on the click of a button (buttonSayHi) in Fragment_One, Fragment_One should be replaced by Fragment_Two.
我不知道,当片段code被调用,并在那里我应该写我的code调用第二个片段。我得到的错误:无法启动活动组件
I am not sure when the Fragment code is called and where am I supposed to write my code to call the second fragment. I get the error: Unable to start Activity component.
不过,code工作正常,如果我放弃侦听器按钮和片段的活动中显示出来。
However, the code works fine if I discard the listener for button and the fragment is displayed within the activity.
我已经做了相当多的研究,阅读片段教程developer.android.com,也是本教程由拉尔斯Vogella。我觉得我的概念并不清楚。
I have done considerable research, read the fragments tutorial on developer.android.com and also the tutorial by Lars Vogella. I think my concepts are not clear.
任何帮助将AP preciated。
Any help will be appreciated.
以下是code:
activity_main.xml
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frameLayoutFragmentContainer"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</FrameLayout>
fragment_one.xml
fragment_one.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/editTextPersonName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" >
<requestFocus />
</EditText>
<Button
android:id="@+id/buttonSayHi"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Say Hi"
android:onClick="onButtonClicked"/>
</LinearLayout>
fragment_two.xml
fragment_two.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textViewResult"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="I will say Hi!" />
</LinearLayout>
MainActivity.java
MainActivity.java
package com.example.fragmenttutorial;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
public class MainActivity extends Activity{
View view;
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Fragment fragmentOne = new FragmentOne();
fragmentTransaction.add(R.id.frameLayoutFragmentContainer, fragmentOne);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
protected void onButtonClicked()
{
if(view.getId() == R.id.buttonSayHi){
Fragment fragmentTwo = new FragmentTwo();
fragmentTransaction.replace(R.id.frameLayoutFragmentContainer, fragmentTwo);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
}
FragmentOne.java
FragmentOne.java
package com.example.fragmenttutorial;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class FragmentOne extends Fragment{
View view;
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_one, container, false);
return view;
}
// protected void onButtonClicked()
// {
// if(view.getId() == R.id.buttonSayHi){
// Fragment fragmentTwo = new FragmentTwo();
//
// fragmentTransaction.replace(R.id.frameLayoutFragmentContainer, fragmentTwo);
// fragmentTransaction.addToBackStack(null);
//
// fragmentTransaction.commit();
//
// }
//
// }
}
我都谈到了上点击code在片段。我也曾尝试实施onClickListener在片段。
I have commented out the on click code in the fragment. I have also tried implementing the onClickListener in the fragment.
FragmentTwo.java
FragmentTwo.java
package com.example.fragmenttutorial;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class FragmentTwo extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_two, container, false);
return view;
}
}
编辑:我已删除了该行的android:的onClick =从我的code。在XMLonButtonClicked。和编辑下列文件,但它仍然无法正常工作。你们能为我提供一个工作的例子没有了android:的onClick =onButtonClicked行
I have removed the line android:onClick="onButtonClicked" from my code in XML. And edited the following files but it still does not work. Can you guys provide me a working example without the android:onClick="onButtonClicked" line.
MainActivity.java
MainActivity.java
package com.example.fragmenttutorial;
import android.os.Bundle;
import android.view.View;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
public class MainActivity extends Activity{
View view;
Fragment fragmentOne;
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentOne = new FragmentOne();
fragmentTransaction.add(R.id.frameLayoutFragmentContainer, fragmentOne);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
FragmentOne.java
FragmentOne.java
package com.example.fragmenttutorial;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class FragmentOne extends Fragment implements OnClickListener{
View view;
Fragment fragmentTwo;
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_one, container, false);
Button buttonSayHi = (Button) view.findViewById(R.id.buttonSayHi);
buttonSayHi.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
fragmentTwo = new FragmentTwo();
fragmentTransaction.replace(R.id.frameLayoutFragmentContainer, fragmentTwo);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
感谢您的宝贵意见。
推荐答案
您片段类应该实现OnClickListener
Your fragment class should implement OnClickListener
public class SmartTvControllerFragment extends Fragment implements View.OnClickListener
然后得到视图,链接按钮,并设置onClickListener类似的例子在下面
Then get view, link button and set onClickListener like in example below
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.smart_tv_controller_fragment, container, false);
upButton = (Button) view.findViewById(R.id.smart_tv_controller_framgment_up_button);
upButton.setOnClickListener(this);
return view;
}
然后添加onClickListener方法,做你想做的。
And then add onClickListener method and do what you want.
@Override
public void onClick(View v) {
//do what you want to do when button is clicked
switch (v.getId()) {
case R.id.textView_help:
switchFragment(HelpFragment.TAG);
break;
case R.id.textView_settings:
switchFragment(SettingsFragment.TAG);
break;
}
}
这是我的code的例子,但我希望你明白
This is my example of code, but I hope you understood
这篇关于按钮侦听在片段的Android按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!