Android 同一活动和同一屏幕中的两个片段

Android 同一活动和同一屏幕中的两个片段,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,我正在创建一个应用程序。我有一个登录页面。登录后,我将显示从firebase检索的userlist,单击任何用户,它将显示聊天屏幕。我已经使用片段完成了这项工作。我有一个UsersListFragment.java和ChatFragment.java,活动是HomeActivity.java 我的应用程序适用于移动电话。我现在也在尝试为平板电脑制作。对于手机,我在不同的屏幕上显示userslist和chat。但对于平板电脑,我希望它们都在同一个屏幕上。当我点击某个用户时,该用户对应的聊天应该显示

我正在创建一个应用程序。我有一个登录页面。登录后,我将显示从firebase检索的userlist,单击任何用户,它将显示聊天屏幕。我已经使用片段完成了这项工作。我有一个
UsersListFragment.java
ChatFragment.java
,活动是
HomeActivity.java

我的应用程序适用于移动电话。我现在也在尝试为平板电脑制作。对于手机,我在不同的屏幕上显示userslist和chat。但对于平板电脑,我希望它们都在同一个屏幕上。当我点击某个用户时,该用户对应的聊天应该显示在另一个片段中

我已经提到了这一切。但我仍然不知道该如何继续

(一)

(二)

(三)

(四)

参考代码

activity\u home.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"
android:background="#FFFFFF"
tools:context=".Activity.HomeActivity">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:id="@+id/framecontainerMain"
    android:layout_weight="1"
    android:orientation="horizontal"
    >
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:id="@+id/framecontainer"
    android:layout_gravity="left"
    android:layout_weight="0.5"
    android:orientation="horizontal"
    >

</FrameLayout>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:id="@+id/framecontainerTab"
    android:layout_weight="0.5"
    android:layout_gravity="right"
    android:orientation="horizontal"
    >

</FrameLayout>
</LinearLayout>


</LinearLayout>
UsersListFragment.java

DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    int height = displaymetrics.heightPixels;
    int width = displaymetrics.widthPixels;
    Log.d(TAG,String.valueOf(height));
    if (width > 1023 || height > 1184){
        //code for big screen (like tablet)

        FrameLayout layout1 = (FrameLayout) findViewById(R.id.framecontainer);
        layout1.setVisibility(View.VISIBLE);

        FrameLayout layout2 = (FrameLayout) findViewById(R.id.framecontainerTab);
        layout2.setVisibility(View.VISIBLE);

        mItemsFragment = new UsersListFragment();
        mItemsFragment.initlizeval(this);

        android.support.v4.app.FragmentTransaction fts = getSupportFragmentManager().beginTransaction();
        fts.add(R.id.framecontainer, mItemsFragment).commit();

        //Instantiate some stuff here like view components
        Fragment fragmentOne = new ChatFragment();
        android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

        ft.add(R.id.framecontainerTab, fragmentOne).commit();


    }else{
        FrameLayout layout1 = (FrameLayout) findViewById(R.id.framecontainer);
        layout1.setVisibility(View.GONE);
        FrameLayout layout2 = (FrameLayout) findViewById(R.id.framecontainerTab);
        layout2.setVisibility(View.GONE);
        layout2.removeAllViews();

        mItemsFragment = new UsersListFragment();
        mItemsFragment.initlizeval(this);
        setFragment(mItemsFragment);

        //code for small screen (like smartphone)
    }


}

public void setFragment(Fragment frag)
{
    android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.add(R.id.framecontainerMain, frag).commit();

}
@Override
public void onFragmentInteraction(String uri) {
    FrameLayout layout1 = (FrameLayout) findViewById(R.id.framecontainer);
    layout1.setVisibility(View.GONE);
    FrameLayout layout2 = (FrameLayout) findViewById(R.id.framecontainerTab);
    layout2.setVisibility(View.GONE);
}

@Override
public void onBackPressed() {
    super.onBackPressed();

    DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    int height = displaymetrics.heightPixels;
    int width = displaymetrics.widthPixels;
    if (width > 1023 || height > 1184) {
        Fragment fragmentOne = new ChatFragment();
        FrameLayout layout1 = (FrameLayout) findViewById(R.id.framecontainer);
        layout1.setVisibility(View.VISIBLE);
        FrameLayout layout2 = (FrameLayout) findViewById(R.id.framecontainerTab);
        layout2.setVisibility(View.VISIBLE);

    }

}
public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        String val = "'";
        mListener.onFragmentInteraction(val);

    }
}

 public void initlizeval(Context context) {

    mListener = (OnFragmentInteractionListener) context;
}
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

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

public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onFragmentInteraction(String val);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  chatMessages = new ArrayList<>();
    view = inflater.inflate(R.layout.fragment_chat, container, false);
    listView = (ListView) view.findViewById(R.id.list_msg);

    adapter = new MessageAdapter(getActivity(), R.layout.item_chat_left, chatMessages);

    listView.setAdapter(adapter);
    setHasOptionsMenu(true);

    actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayUseLogoEnabled(false);
        ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#72B94F"));
        actionBar.setBackgroundDrawable(colorDrawable);
        actionBar.setHomeAsUpIndicator(R.drawable.ic_backarrow);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setHomeButtonEnabled(true);
    }

    String[] strings = {Global.getInstance().someData, Global.getInstance().ownerId};
    Arrays.sort(strings);
    Arrays.sort(strings);
    String first = strings[0];
    String second = strings[1];
    chatKey = first + "_" + second;

    final FirebaseUtil utils = new FirebaseUtil(getContext());

    String timeaTab = Global.getInstance().time;
    chatMessages.clear();
    utils.startListeningMsgs(chatKey, timeaTab, new CallBack() {
        @Override
        public void onCallback(Map<String, Object> response, String Success) {
            Map<String, Object> sentByMe = (Map<String, Object>) response.get("value");


            Double chat_time = (Double) response.get("last_sent");
            // String timeString = String.valueOf(chat_time);

            String sentBy = (String) sentByMe.get("sent_by");
            String ownerId = Global.getInstance().ownerId;
            synchronized (this) {
                ChatMessage chat;
                if (sentBy.equals(ownerId)) {

                    String msg = (String) sentByMe.get("msg");
                    chat = new ChatMessage();
                    chat.setContent(msg);
                    String mine = "false";
                    chat.setIsMine(mine);
                    chat.setTime(chat_time);

                } else {
                    String msg = (String) sentByMe.get("msg");
                    chat = new ChatMessage();
                    chat.setContent(msg);
                    String mine = "true";
                    chat.setIsMine(mine);
                    chat.setTime(chat_time);

                }
                chatMessages.add(chat);
            }
            adapter.notifyDataSetChanged();
        }
    });

    mEmailSignInButton = (Button) view.findViewById(R.id.btn_chat_send);

    editText = (EditText) view.findViewById(R.id.msg_type);

    //event for button SEND
    mEmailSignInButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            Toast.makeText(getActivity(), String.valueOf( Global.getInstance().unreadMessageUsers.size()) , Toast.LENGTH_SHORT).show();
            if (editText.getText().toString().trim().equals("")) {
                Toast.makeText(getActivity(), "Type some message...", Toast.LENGTH_SHORT).show();
            } else {
                Map<String, Object> val = new HashMap<String, Object>();
                val.put("msg", editText.getText().toString());
                val.put("sent_by", Global.getInstance().ownerId);
                val.put("sent_to", Global.getInstance().someData);
                val.put("type", "chat");
                FirebaseUtil utilMsg = new FirebaseUtil(getContext());
                utilMsg.setNewMessageNotification(Global.getInstance().ownerId, Global.getInstance().someData, "chat");
                utilMsg.sendMessageRequestChatKeyValue(chatKey, val);
                editText.setText("");
            }
        }
    });
    return view;
}
 }
ChatFragment.java

DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    int height = displaymetrics.heightPixels;
    int width = displaymetrics.widthPixels;
    Log.d(TAG,String.valueOf(height));
    if (width > 1023 || height > 1184){
        //code for big screen (like tablet)

        FrameLayout layout1 = (FrameLayout) findViewById(R.id.framecontainer);
        layout1.setVisibility(View.VISIBLE);

        FrameLayout layout2 = (FrameLayout) findViewById(R.id.framecontainerTab);
        layout2.setVisibility(View.VISIBLE);

        mItemsFragment = new UsersListFragment();
        mItemsFragment.initlizeval(this);

        android.support.v4.app.FragmentTransaction fts = getSupportFragmentManager().beginTransaction();
        fts.add(R.id.framecontainer, mItemsFragment).commit();

        //Instantiate some stuff here like view components
        Fragment fragmentOne = new ChatFragment();
        android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

        ft.add(R.id.framecontainerTab, fragmentOne).commit();


    }else{
        FrameLayout layout1 = (FrameLayout) findViewById(R.id.framecontainer);
        layout1.setVisibility(View.GONE);
        FrameLayout layout2 = (FrameLayout) findViewById(R.id.framecontainerTab);
        layout2.setVisibility(View.GONE);
        layout2.removeAllViews();

        mItemsFragment = new UsersListFragment();
        mItemsFragment.initlizeval(this);
        setFragment(mItemsFragment);

        //code for small screen (like smartphone)
    }


}

public void setFragment(Fragment frag)
{
    android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.add(R.id.framecontainerMain, frag).commit();

}
@Override
public void onFragmentInteraction(String uri) {
    FrameLayout layout1 = (FrameLayout) findViewById(R.id.framecontainer);
    layout1.setVisibility(View.GONE);
    FrameLayout layout2 = (FrameLayout) findViewById(R.id.framecontainerTab);
    layout2.setVisibility(View.GONE);
}

@Override
public void onBackPressed() {
    super.onBackPressed();

    DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    int height = displaymetrics.heightPixels;
    int width = displaymetrics.widthPixels;
    if (width > 1023 || height > 1184) {
        Fragment fragmentOne = new ChatFragment();
        FrameLayout layout1 = (FrameLayout) findViewById(R.id.framecontainer);
        layout1.setVisibility(View.VISIBLE);
        FrameLayout layout2 = (FrameLayout) findViewById(R.id.framecontainerTab);
        layout2.setVisibility(View.VISIBLE);

    }

}
public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        String val = "'";
        mListener.onFragmentInteraction(val);

    }
}

 public void initlizeval(Context context) {

    mListener = (OnFragmentInteractionListener) context;
}
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

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

public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onFragmentInteraction(String val);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  chatMessages = new ArrayList<>();
    view = inflater.inflate(R.layout.fragment_chat, container, false);
    listView = (ListView) view.findViewById(R.id.list_msg);

    adapter = new MessageAdapter(getActivity(), R.layout.item_chat_left, chatMessages);

    listView.setAdapter(adapter);
    setHasOptionsMenu(true);

    actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayUseLogoEnabled(false);
        ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#72B94F"));
        actionBar.setBackgroundDrawable(colorDrawable);
        actionBar.setHomeAsUpIndicator(R.drawable.ic_backarrow);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setHomeButtonEnabled(true);
    }

    String[] strings = {Global.getInstance().someData, Global.getInstance().ownerId};
    Arrays.sort(strings);
    Arrays.sort(strings);
    String first = strings[0];
    String second = strings[1];
    chatKey = first + "_" + second;

    final FirebaseUtil utils = new FirebaseUtil(getContext());

    String timeaTab = Global.getInstance().time;
    chatMessages.clear();
    utils.startListeningMsgs(chatKey, timeaTab, new CallBack() {
        @Override
        public void onCallback(Map<String, Object> response, String Success) {
            Map<String, Object> sentByMe = (Map<String, Object>) response.get("value");


            Double chat_time = (Double) response.get("last_sent");
            // String timeString = String.valueOf(chat_time);

            String sentBy = (String) sentByMe.get("sent_by");
            String ownerId = Global.getInstance().ownerId;
            synchronized (this) {
                ChatMessage chat;
                if (sentBy.equals(ownerId)) {

                    String msg = (String) sentByMe.get("msg");
                    chat = new ChatMessage();
                    chat.setContent(msg);
                    String mine = "false";
                    chat.setIsMine(mine);
                    chat.setTime(chat_time);

                } else {
                    String msg = (String) sentByMe.get("msg");
                    chat = new ChatMessage();
                    chat.setContent(msg);
                    String mine = "true";
                    chat.setIsMine(mine);
                    chat.setTime(chat_time);

                }
                chatMessages.add(chat);
            }
            adapter.notifyDataSetChanged();
        }
    });

    mEmailSignInButton = (Button) view.findViewById(R.id.btn_chat_send);

    editText = (EditText) view.findViewById(R.id.msg_type);

    //event for button SEND
    mEmailSignInButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            Toast.makeText(getActivity(), String.valueOf( Global.getInstance().unreadMessageUsers.size()) , Toast.LENGTH_SHORT).show();
            if (editText.getText().toString().trim().equals("")) {
                Toast.makeText(getActivity(), "Type some message...", Toast.LENGTH_SHORT).show();
            } else {
                Map<String, Object> val = new HashMap<String, Object>();
                val.put("msg", editText.getText().toString());
                val.put("sent_by", Global.getInstance().ownerId);
                val.put("sent_to", Global.getInstance().someData);
                val.put("type", "chat");
                FirebaseUtil utilMsg = new FirebaseUtil(getContext());
                utilMsg.setNewMessageNotification(Global.getInstance().ownerId, Global.getInstance().someData, "chat");
                utilMsg.sendMessageRequestChatKeyValue(chatKey, val);
                editText.setText("");
            }
        }
    });
    return view;
}
 }
谁能告诉我,我能做什么。android的新功能。
提前感谢。

您是否已将HomeActivity添加到清单文件中 试试这个:

  • 2个不同的布局文件夹:布局,其中包含智能手机的Activity_home.xml、片段布局等。;布局大,其中包含平板电脑的Activity_home.xml

  • 在HomeActivity.java中,将发布的代码替换为以下代码:

        // Part of onCreate()
        setContentView(R.layout.activity_home);
        FrameLayout layout1 = (FrameLayout) findViewById(R.id.framecontainer);
        FrameLayout layout2 = (FrameLayout) findViewById(R.id.framecontainerTab);
    
        android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        // Initialize UserListFragment
        // and setTag, UserList. [Both smartphone and tablet]
        mItemsFragment = new UsersListFragment();
        mItemsFragment.initlizeval(this);
        ft.add(R.id.framecontainer, frag, "UserList").commit();
    
        if (layout2 != null){
            // Tablet, initiallly no user selected and layout is GONE.
            layout2.setVisibility(View.GONE);
        }
    }
    
    @Override
    public void onFragmentInteraction(String uri) {
        FrameLayout layout2 = (FrameLayout) findViewById(R.id.framecontainerTab);
        android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ChatFragment fragmentOne = new ChatFragment();
        if(layout2 == null){ // Smartphone, replace fragment.
            ft.replace(R.id.framecontainer, fragmentOne, "Chat");
            ft.addToBackStack(null);
            ft.commit();
        }else{ // Tablet, add fragment and show on UI.
            ft.add(R.id.framecontainerTab, fragmentOne, "Chat").commit();
            layout2.setVisibility(View.VISIBLE);
        }
    }
    
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        FrameLayout layout2 = (FrameLayout) findViewById(R.id.framecontainerTab);
        if (layout2 != null) { // Tablet
            if(layout2.isShown()){
                android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
                ChatFragment fragmentOne = (ChatFragment) fm.findFragmentByTag("Chat");
                fm.beginTransaction().remove(fragmentOne).commit();
                layout2.setVisibility(View.GONE);
            }
        }
    }
    

  • 希望能有帮助

    添加ChatFragment文件too@sanjeetkumarSingh补充。实际上代码id太大了。它包含各种功能。但对于这个问题,这么多代码只与我的完整代码相关。onCreateView中没有其他内容吗??因为根据崩溃日志,在第189行有一些排序操作。在com.rider.project.Fragments.ChatFragment.onCreateView(ChatFragment.java:189)@sanjeetkumarSingh更新了代码。检查。它给出数组中的错误。排序(字符串);有人能帮忙吗。我仍然被困在同一个地方|