4
我正在嘗試製作像Youtube或Google+應用程序一樣的滑動菜單。單擊SlidingMenu上的項目時更改正面片段
我正在關注this項目代碼,而我正在嘗試做的事情是,當我點擊左欄上的項目時,「活動」向左滑動並顯示新內容。
就像當你是Google+ 家屏幕上,並單擊左側菜單上的輪廓項目,將其滑回只剩下輪廓屏幕加載。
所以這裏是我的代碼。
我這個叫ExampleActivity.java主要活動:
public class ExampleActivity extends SlidingFragmentActivity
{
//public PagerAdapter adapter;
public FragmentManager mFragmentManager;
private List<Fragment> mFragments = new ArrayList<Fragment>();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mFragmentManager = getSupportFragmentManager();
// set the Behind View
setBehindContentView(R.layout.frame);
getSupportFragmentManager().beginTransaction().add(R.id.frame, new SampleListFragment()).commit();
// customize the SlidingMenu
this.setSlidingActionBarEnabled(true);
getSlidingMenu().setShadowWidthRes(R.dimen.shadow_width);
getSlidingMenu().setShadowDrawable(R.drawable.shadow);
getSlidingMenu().setBehindOffsetRes(R.dimen.actionbar_home_width);
getSlidingMenu().setBehindScrollScale(0.25f);
getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
// customize the ActionBar
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.main);
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
toggle();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
this.getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
和我有SampleListFragment.java它處理左邊的菜單上點擊。
public class SampleListFragment extends ListFragment
{
private ExampleActivity mActivity;
@Override
public void onResume()
{
super.onResume();
mActivity = (ExampleActivity)getActivity();
}
@Override
public void onListItemClick(ListView l, View v, int position, long id)
{
Fragment frag = null;
switch(position)
{
case 0:
frag = new FirstFragment();
break;
case 1:
frag = new SecondFragment();
break;
}
if (frag != null)
replaceFragment(frag);
}
protected void replaceFragment(Fragment frag)
{
FragmentTransaction fragmentTransaction = mActivity.getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.main, frag);
fragmentTransaction.commit();
mActivity.showAbove();
}
/**
* A callback function, executed when this fragment is attached to an
* activity
*/
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.list, null);
return v;
}
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
SampleAdapter adapter = new SampleAdapter(getActivity());
for (int i = 0; i < 20; i++)
{
adapter.add(new SampleItem(new Fragment(), "Sample List",
android.R.drawable.btn_star));
}
setListAdapter(adapter);
}
private class SampleItem
{
public Fragment frag;
public String tag;
public int iconRes;
public SampleItem(Fragment fram, String tag, int iconRes)
{
this.frag = frag;
this.tag = tag;
this.iconRes = iconRes;
}
}
public class SampleAdapter extends ArrayAdapter<SampleItem>
{
public SampleAdapter(Context context)
{
super(context, 0);
}
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = LayoutInflater.from(getContext()).inflate(
R.layout.row, null);
}
ImageView icon = (ImageView) convertView
.findViewById(R.id.row_icon);
TextView title = (TextView) convertView
.findViewById(R.id.row_title);
convertView.setTag(title.getText().toString());
return convertView;
}
}
}
所以會發生什麼,當我點擊左側菜單中的第一項,該FirstFragment()被調用,麪包所示但佈局不添加到活動中。
下面是FirstFragment類的代碼:
public class FirstFragment extends Fragment
{
private ExampleActivity mActivity;
@Override
public void onCreate(Bundle b)
{
super.onCreate(b);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
super.onCreateView(inflater, container, savedInstanceState);
View fragmentView = inflater.inflate(R.layout.firstfragment, container, false);
TextView textView = (TextView) fragmentView.findViewById(R.id.textview);
textView.setText("Lorem ipsum");
return fragmentView;
}
@Override
public void onResume()
{
super.onResume();
mActivity = (ExampleActivity)getActivity();
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
Toast.makeText(getActivity(), "First Fragment", Toast.LENGTH_SHORT).show();
}
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
}
}
下面是ExampleActivity.java是main.xml中的佈局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/white"
android:orientation="vertical" >
<Button
android:text="Random Button!"
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/logo"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
問題
如何將第一個片段佈局添加到活動中。它始終顯示初始佈局,但片段的佈局未加載到活動中。
謝謝。
你應該開始關小(使用正常的佈局不片段)和向上移動,這樣你就可以問一個問題緊緊地專注於您的問題。 – Graeme