Android 同一活动和同一屏幕中的两个片段
我正在创建一个应用程序。我有一个登录页面。登录后,我将显示从firebase检索的userlist,单击任何用户,它将显示聊天屏幕。我已经使用片段完成了这项工作。我有一个Android 同一活动和同一屏幕中的两个片段,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,我正在创建一个应用程序。我有一个登录页面。登录后,我将显示从firebase检索的userlist,单击任何用户,它将显示聊天屏幕。我已经使用片段完成了这项工作。我有一个UsersListFragment.java和ChatFragment.java,活动是HomeActivity.java 我的应用程序适用于移动电话。我现在也在尝试为平板电脑制作。对于手机,我在不同的屏幕上显示userslist和chat。但对于平板电脑,我希望它们都在同一个屏幕上。当我点击某个用户时,该用户对应的聊天应该显示
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添加到清单文件中 试试这个:
// 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更新了代码。检查。它给出数组中的错误。排序(字符串);有人能帮忙吗。我仍然被困在同一个地方|