2013-05-27 69 views
0

我有两个类都使用片段; FirstFragment类和SignUp类。一次使用一个片段。 在FirstFragment中有一个按钮,点击按钮我必须去下一个片段。但是当点击按钮时我得到了错误。应用程序崩溃时按钮点击片段

这里是FirstFragment班组长的代码

package com.example.bajraregistertesteclipse; 

import java.util.zip.Inflater; 


import android.app.Fragment; 
import android.app.FragmentTransaction; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class FirstFragment extends Fragment { 
LoginDataBaseAdapter loginDataBaseAdapter; 
EditText loginTestUser,loginTestPassword,loginTestConfirmPassword; 
String userName,password,confirmpassword; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 

     View view = inflater.inflate(R.layout.firstfragment, container, false); 
     Button btnSignup = (Button) view.findViewById(R.id.buttonCreateAccount); 
     btnSignup.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       SignUp signup=new SignUp(); 
       FragmentTransaction ft = getFragmentManager().beginTransaction(); 
       ft.replace(R.id.listFragment, signup); 
       ft.addToBackStack(null); 
       ft.commit(); 


       } 

     }); 

     return view; 
} 


} 

这里是activity_main XML的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="horizontal"> 

<fragment 
     android:id="@+id/listFragment" 
     android:layout_width="211dp" 
     android:layout_weight="1" 
     android:layout_height="match_parent" 
     android:layout_marginTop="?android:attr/actionBarSize" 
     class="com.example.bajraregistertesteclipse.FirstFragment" 
        tools:layout="@layout/firstfragment"/> 

预先感谢您!

我的日志猫

log cat 
        05-27 19:46:29.635: E/ActivityThread(768): at java.lang.Thread.run(Thread.java:856) 

        05-27 19:46:29.716: E/StrictMode(768): null 

        05-27 19:46:29.716: E/StrictMode(768): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection [email protected]ebd08 that was originally bound here 

        05-27 19:46:29.716: E/StrictMode(768): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969) 

        05-27 19:46:29.716: E/StrictMode(768): at android.app.ContextImpl.bindService(ContextImpl.java:1418) 

        05-27 19:46:29.716: E/StrictMode(768): at android.content.ContextWrapper.bindService(ContextWrapper.java:473) 

        05-27 19:46:29.716: E/StrictMode(768): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157) 

        05-27 19:46:29.716: E/StrictMode(768): at android.os.AsyncTask$2.call(AsyncTask.java:287) 

        05-27 19:46:29.716: E/StrictMode(768): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 

        05-27 19:46:29.716: E/StrictMode(768): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 

        05-27 19:47:20.355: E/ActivityThread(768): Service com.android.exchange.ExchangeService has leaked ServiceConnection [email protected]18928 that was originally bound here 

        05-27 19:47:20.355: E/ActivityThread(768): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 


        05-27 19:47:20.355: E/ActivityThread(768): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 

我的注册类

package com.example.bajraregistertesteclipse; 

import java.util.zip.Inflater; 

import android.app.Activity; 
import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class SignUp extends Fragment{ 

    LoginDataBaseAdapter loginDataBaseAdapter; 
    EditText loginTestUser,loginTestPassword,loginTestConfirmPassword; 
    String userName,password,confirmpassword; 

    @Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
     final View view = inflater.inflate(R.layout.signup, container, false); 

     loginDataBaseAdapter= loginDataBaseAdapter.open(); 



     final EditText loginTestUser = (EditText) view.findViewById(R.id.editTextUserName); 
     final EditText loginTestPassword = (EditText) view.findViewById(R.id.editTextPassword); 
     final EditText loginTestConfirmPassword = (EditText) view.findViewById(R.id.editTextConfirmPassword); 
     Button btnSignup = (Button) view.findViewById(R.id.buttonCreateAccount); 




     btnSignup.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 



       //loginTestUser = (EditText) view.findViewById(R.id.editTextUserName); 
       userName=loginTestUser.getText().toString(); 

       // loginTestPassword = (EditText) view.findViewById(R.id.editTextPassword); 
       password=loginTestPassword.getText().toString(); 

       // loginTestConfirmPassword = (EditText) view.findViewById(R.id.editTextConfirmPassword); 
       confirmpassword=loginTestConfirmPassword.getText().toString(); 

      // String userName = loginTestUser.getText().toString(); 
       // String password = loginTestPassword.getText().toString(); 
       // String confirmpassword = loginTestConfirmPassword.getText().toString(); 

       //check if any of the fields are vacant 

       if (userName.equals("") || password.equals("") || confirmpassword.equals("")) { 

        Toast.makeText(getActivity(), "Field Vaccant", Toast.LENGTH_LONG).show(); 
        return; 
       } 
       // check if both password matches 
       if (!password.equals(confirmpassword)) { 
        Toast.makeText(getActivity(), "Password does not match", Toast.LENGTH_LONG).show(); 
        return; 
       } else { 
        // Save the Data in Database 
        loginDataBaseAdapter.insertEntry(userName, password); 
        Toast.makeText(getActivity(), "Account Successfully Created ", Toast.LENGTH_LONG).show(); 

       } 
      } 
     }); 




     return view; 
} 


} 
+0

“点击按钮时我出错了。”什么错误? – Rick77

+0

@ Rick77应用程序将崩溃....消息:不幸的是你的应用程序已停止。 –

+0

:D我的意思是“logcat给你什么样的错误?”。 Logcat是Android日志记录工具:它为您提供了大量关于正在进行的进程的有用信息,允许您轻松打印调试语句(例如检查变量)并在出现错误时打印回溯:http://developer.android。 com/tools/debugging/debugging-log.html – Rick77

回答

2

我觉得有些事情错

ft.replace(R.id.listFragment, signup); 

我searsh利特尔位和发现可能与主题:

  1. FragmentTransaction.replace() not working
  2. Fragment duplication on Fragment Transaction

所以变通方法 “从XML取出片段并在replace()方法使用的FrameLayout部件”。

更新:Read this cerfuly并实施dinamycaly添加片段而不是静态的xml。 Google提供example如何动态添加它。

你的XML改变的FrameLayout:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
中的onCreate

()把你的第一个片段(你需要把它移动到某个类)

// Add the fragment to the 'fragment_container' FrameLayout 
    getSupportFragmentManager().beginTransaction() 
      .add(R.id.fragment_container, firstFragment).commit(); 

的onClick方法:

SignUp signup=new SignUp(); 
    // Add the fragment to the 'fragment_container' FrameLayout 
    getSupportFragmentManager().beginTransaction() 
      .add(R.id.fragment_container, signup).commit(); 

这在理论上我并没有尝试过自我。

相关问题