【问题标题】:FragmentTransaction replace keep old fragmentFragmentTransaction 替换保留旧片段
【发布时间】:2015-10-11 18:15:02
【问题描述】:

我正在使用 fragment.replace 在聊天应用程序中使用 parse 和 sinch 午餐用户列表,一开始我使用视图但现在我正在更改为片段,但这个地方只是追加而不是替换片段。我正在使用 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>

请给个提示。 非常感谢

【问题讨论】:

    标签: java android android-fragments


    【解决方案1】:

    在论坛里面搜索,找到了一些答案,基于这个[链接][Android Replace Fragment within a 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">
    

    现在它显示为上一层之上的一个新层。

    【讨论】:

    • 我使用 myContext 作为 FragmentActivity 但仍然无法正常工作,该片段与另一个片段重叠,这个分配是正确的还是我做错了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    相关资源
    最近更新 更多