我知道以下post: 在单个活动中使用多个片段
我正在寻找的是对特定问题的具体答案。 以下代码的结果是一个空白的FragmentActivity。 我在下面的代码中缺少什么来让它呈现一个包含两个片段的活动。 一个是空列表片段,另一个是包含输入框和水平布局按钮的片段(此布局可以在http://developer.android.com/training/basics/firstapp/starting-find – activity.html )我希望绝对放在屏幕的底部,固定高度约为25度。
的Manifest.xml
我的主要活动及其关联的application.xml文件。
package com.my.package; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; public class Application extends FragmentActivity implements MessageListViewFragment.OnLineSelectedListener, SendMessageFragment.OnSendButtonPressed { MessageListViewFragment mMessageListFragment; SendMessageFragment mSendMessageFragment; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.application); mMessageListFragment = new MessageListViewFragment(); mSendMessageFragment = new SendMessageFragment(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.add(R.id.message_fragment, mMessageListFragment); transaction.add(R.id.send_fragment, mSendMessageFragment); transaction.commit(); } @Override public void onListItemSelected(int position) { // TODO Auto-generated method stub } @Override public void onSendButtonPressed() { // TODO Auto-generated method stub } }
布局:
现在为两个片段及其相关的xml文件:First Fragment(顶部列表片段)
package com.my.package; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class MessageListViewFragment extends ListFragment { OnLineSelectedListener mCallback; @Override public void onAttach(Activity activity) { super.onAttach(activity); // This makes sure that the container activity has implemented // the callback interface. If not, it throws an exception try { mCallback = (OnLineSelectedListener)activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnLineSelectedListener"); } } // Container Activity must implement this interface public interface OnLineSelectedListener { public void onListItemSelected(int position); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.list_fragment, null); } }
布局:
第二个片段(在底部)
package com.my.package; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class SendMessageFragment extends Fragment { OnSendButtonPressed mCallback; // Container Activity must implement this interface public interface OnSendButtonPressed { public void onSendButtonPressed(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.input_fragment, null); } @Override public void onAttach(Activity activity) { super.onAttach(activity); // This makes sure that the container activity has implemented // the callback interface. If not, it throws an exception try { mCallback = (OnSendButtonPressed)activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener"); } } }
布局:
请执行下列操作:
Fragment
更改为主活动XML中的FrameLayout
。 FrameLayout
(在步骤1中创建的),将layout_width
从fill_parent
更改为match_parent
。 layout_height
从fill_parent
更改为wrap_content
,对于主XML文件中的FrameLayout
(在步骤1中创建的那些)。 FrameLayout
更改为List Fragment XML中的ListView
,因为它是List。 LisView
的id更改为@android:id/list
,因为ListFragment
需要它。 然后让我知道,干杯。
编辑,也是这些:
return inflater.inflate(R.layout.list_fragment, null);
return inflater.inflate(R.layout.list_fragment, container, false);
。 return inflater.inflate(R.layout.input_fragment, null);
return inflater.inflate(R.layout.input_fragment, container, false);
编辑:
使您的主要活动XML文件如下:
我拿出了android:name"..."
因为我不知道它是什么,也不知道它是什么,如果你知道它确实做了什么,只需加回去,应该没问题。