Android - 如何将活动布局膨胀为片段?

时间:2016-05-27 05:59:02

标签: android xml android-layout android-studio android-fragments

嗨,我仍然是Android编程的初学者。我在我的程序中制作了tablayout,当我点击选项卡时,我希望片段显示活动布局。

目的是为了活动内部的小部件,例如按钮'和回收器视图'功能可以完成。

我试图膨胀活动布局它显示我想要的东西然而当我点击里面的按钮时,应用程序停止工作而不是我设置的东西。

还有其他方法吗?请帮帮我

这是logcat:

05-27 12:43:41.720 12549-12549/? E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: com.rumahdosen.www.rumahdosen, PID: 12549
                                               java.lang.IllegalStateException: Could not find method clickLogin(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'btnLogin'
                                                   at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:325)
                                                   at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
                                                   at android.view.View.performClick(View.java:4463)
                                                   at android.view.View$PerformClick.run(View.java:18770)
                                                   at android.os.Handler.handleCallback(Handler.java:808)
                                                   at android.os.Handler.dispatchMessage(Handler.java:103)
                                                   at android.os.Looper.loop(Looper.java:193)
                                                   at android.app.ActivityThread.main(ActivityThread.java:5292)
                                                   at java.lang.reflect.Method.invokeNative(Native Method)
                                                   at java.lang.reflect.Method.invoke(Method.java:515)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
                                                   at dalvik.system.NativeStart.main(Native Method)

这是片段

的java类
public class FragmentFriends extends Fragment {
@Nullable
@Override

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.activity_login,container,false);
}
}

以下是activity_login

的xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.rumahdosen.www.rumahdosen.LoginActivity">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Login"
    android:id="@+id/btnLogin"
    android:layout_below="@+id/etPswd"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="46dp"
    android:onClick="clickLogin"/>
</RelativeLayout>

以下是LoginActivity.java

public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
}

public void clickLogin(View view){
           Toast.makeText(getApplicationContext(),"test",Toast.LENGTH_LONG).show();
}
}

4 个答案:

答案 0 :(得分:1)

你正在加载一个布局xml,它有一个方法 clickLogin()可能用于按钮。

请检查片段中是否有名称为 clickLogin()的方法。

答案 1 :(得分:0)

看起来你已经在你的xml文件中为你点击了按钮分配了clickLogin()方法,所以只需检查你的xml文件你会在按钮标签中找到这个:android:onclick =&#34; clickLogin&#34 ;

所以你需要在你的班级中声明这个方法,如下所示,

 public void clickLogin (View v)
 {   
 }

答案 2 :(得分:0)

xml 文件中删除clickLogin()属性。

OR

在片段中创建方法clickLogin(View view)

public void clickLogin(View view) {

}

<强>替换

Toast.makeText(getApplicationContext(),"test",Toast.LENGTH_LONG).show();

Toast.makeText(LoginActivity.this,"test",Toast.LENGTH_LONG).show();

答案 3 :(得分:0)

您必须在片段中定义clickLogin()方法,或者只需为片段中的按钮设置setOnClickListener()。