簡體   English   中英

FragmentTransaction替換保留舊片段

[英]FragmentTransaction replace keep old fragment

我正在使用fragment.replace來在聊天應用程序中使用parse和sinch來午餐用戶列表,一開始我使用視圖,但是現在我要更改為fragment,但是該位置只是追加而不是替換fragment。 我正在使用android.support.v4.app.Fragment,FragmentManager和FragmentTransaction。 我究竟做錯了什么 。 這是我的課:

import android.content.Context;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.app.Activity;
import android.os.Bundle;
import com.parse.LogInCallback;
import com.parse.Parse;
import com.parse.ParseException;
import com.parse.ParseUser;
import com.parse.SignUpCallback;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.paul.mapasxavo.ListUsersActivity;
import com.example.paul.mapasxavo.R;
public class ChatActivity extends Fragment  {

    private Button signUpButton;
    private Button loginButton;
    private EditText usernameField;
    private EditText passwordField;
    private String username;
    private String password;
    private Intent intent;
    private Intent serviceIntent;
    Context thiscontext;
    private final String TAG="ChatActivity";

    public ChatActivity(){

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (currentUser != null) {

        }


    }

    @Override
    public void onDestroy() {
            super.onDestroy();
        }

    @Override
    public  View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.activity_chat, container, false);
        loginButton = (Button) rootView.findViewById(R.id.loginButton);
        signUpButton = (Button) rootView.findViewById(R.id.signupButton);
        usernameField = (EditText) rootView.findViewById(R.id.loginUsername);
        passwordField = (EditText) rootView.findViewById(R.id.loginPassword);
        loginButton = (Button) rootView.findViewById(R.id.loginButton);
        signUpButton = (Button) rootView.findViewById(R.id.signupButton);
        usernameField = (EditText) rootView.findViewById(R.id.loginUsername);
        passwordField = (EditText) rootView.findViewById(R.id.loginPassword);
        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                username = usernameField.getText().toString();
                password = passwordField.getText().toString();

                ParseUser.logInInBackground(username, password, new LogInCallback() {
                    public void done(ParseUser user, com.parse.ParseException e) {
                        if (user != null) {
                            ListUsersActivity listUsersActivity = new ListUsersActivity();
                            FragmentManager fragmentManager= getFragmentManager();
                            FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();
                            fragmentTransaction.replace(R.id.listados,listUsersActivity);
                            fragmentTransaction.commit();
                            Log.v(TAG,"boton login");
                        } else {
                            Toast.makeText(getActivity(),
                                    getString(R.string.login_error),
                                    Toast.LENGTH_LONG).show();
                        }
                    }
                });
            }
        });


        signUpButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                username = usernameField.getText().toString();
                password = passwordField.getText().toString();

                ParseUser user = new ParseUser();
                user.setUsername(username);
                user.setPassword(password);

                user.signUpInBackground(new SignUpCallback() {
                    public void done(com.parse.ParseException e) {
                        if (e == null) {

                            ListUsersActivity listUsersActivity = new ListUsersActivity();
                            FragmentManager fragmentManager= getFragmentManager();
                            FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();
                            fragmentTransaction.replace(R.id.listados,listUsersActivity);
                            fragmentTransaction.commit();
                            Log.v(TAG,"boton registrar");

                        } else {
                            Toast.makeText(getActivity(),
                                    getString(R.string.sigin_error)
                                    , Toast.LENGTH_LONG).show();
                        }
                    }
                });
            }
        });



        return rootView;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

    @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();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

我的片段是這樣的:

<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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.paul.mapasxavo.ChatActivity">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:id="@+id/listados"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="40dp"
            android:text="@string/txt_usuario"
            android:id="@+id/loginUsernameText"
            android:layout_gravity="center_horizontal"
            android:textSize="20sp"/>
        <EditText
            android:id="@+id/loginUsername"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:inputType="text"
            android:padding="10dp"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp">
            <requestFocus/>
        </EditText>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="40dp"
            android:text="@string/txt_password"
            android:id="@+id/loginPasswordText"
            android:layout_gravity="center_horizontal"
            android:textSize="20sp"/>
        <EditText
            android:id="@+id/loginPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="40dp"
            android:inputType="textPassword"
            android:padding="10dp"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp">
        </EditText>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginBottom="40dp"
            android:layout_gravity="center">

            <Button
                style="@style/botones"
                android:id="@+id/loginButton"
                android:layout_width="168dp"
                android:layout_height="wrap_content"
                android:text="Login"
                />
            <Button
                style="@style/botones"
                android:id="@+id/signupButton"
                android:layout_width="163dp"
                android:layout_height="wrap_content"
                android:text="Registrar"
                />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

我的替換片段是這樣的:

<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="vertical"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.paul.mapasxavo.ListUsersActivity">

    <Button
        style="@style/botones"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/logout"
        android:id="@+id/logoutButton"
        android:gravity="center_vertical|center_horizontal"
        android:layout_gravity="center_horizontal"
        android:textSize="24sp"
        android:padding="15dp"
         />
    <ListView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="16dp"
        android:background="@color/colorPrimary"
        android:id="@+id/usersListView">
    </ListView>
</LinearLayout>

請給個提示。 非常感謝

根據[link] [ Android Fragment中的Fragment片段 ],在論壇內搜索,發現了一些答案。 我可以使其在片段事務和xml中進行一些更改。

聊天活動:

loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
username = usernameField.getText().toString();
password = passwordField.getText().toString();
ParseUser.logInInBackground(username, password, new LogInCallback() {
public void done(ParseUser user, com.parse.ParseException e) {
if (user != null) {
FragmentManager fragmentManager = myContext.getSupportFragmentManager();
//start transaction
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ListUsersActivity listUsersActivity = new ListUsersActivity();
fragmentTransaction.addToBackStack("xyz");                            fragmentTransaction.replace(R.id.listados,listUsersActivity);
fragmentTransaction.commit();
serviceIntent = new Intent(getActivity().getApplicationContext(), MessageService.class);
getActivity().startService(serviceIntent);
} else {
Toast.makeText(getActivity(),
getString(R.string.login_error),
Toast.LENGTH_LONG).show();
}
}
);
}
});

activity_chat.xml:

<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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:id="@+id/listados"
    tools:context="com.example.paul.mapasxavo.ChatActivity">

現在,它顯示為最后一層的新層。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM