2013-05-27 5 views
0

У меня есть два класса с использованием фрагмента; Класс FirstFragment и класс SignUp. Использование одного фрагмента за раз. В FirstFragment есть кнопка, и при нажатии кнопки мне нужно перейти к следующему фрагменту. Но при нажатии на кнопку я получил ошибку.Ошибка приложения при нажатии кнопки на фрагменте

Вот код FirstFragment classs

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"/> 

Спасибо заранее !!!

My Log Cat

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 и использовать компонент FrameLayout в способе замены()."

UPDATE: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(); 

Это в теории, я не пробовал его.

Смежные вопросы