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()가 호출됩니다 토스트가 표시되지만 레이아웃은 활동에 추가되지 않습니다. 여기
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);
}
}
이 main.xml에있는 ExampleActivity.java의 레이아웃입니다 : 여기
는 FirstFragment 클래스의 코드입니다
<?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