我已经按照教程逐步创建了一个滑动菜单并且它可以工作,但是在代码中我注意到当用户触摸菜单项时代码将运行这段代码:
MainActivity:
....
/**
* Slide menu item click listener
* */
private class SlideMenuClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// display view for selected nav drawer item
displayView(position);
}
}
/**
* Diplaying fragment view for selected nav drawer list item
* */
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:{
fragment = new PersonaggiPrincipali();
break;
}
case 1:{
fragment = new PersonaggiSecondari();
break;
}
case 2:{
fragment = new Video();
break;
}
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
....
基本上,当点击该项目时,它会调用新的Class
该课程以这种方式形成:
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class PersonaggiPrincipali extends Fragment {
public PersonaggiPrincipali(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.personaggi_principali, container, false);
return rootView;
}
}
所以它只返回布局,上面的displayView
函数会用返回的那个替换当前的,对吗?
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
....
}
我的问题是,在返回的视图中,如果类只是布局的返回,我该如何操作呢?
例如,让我们假设在返回的视图中我有一个Button
,我需要设置一个ClickListener或者只是创建一个函数来改变Activity(应该在主视图中插入的活动) SlidingMenu),我该怎么做?
我应该写MainActivity
中的所有代码来管理吗?
答案 0 :(得分:1)
您可以使用相同的(onCreateView()
)方法执行此操作。此外,您可以在PersonaggiPrincipali
类的片段布局中包含对视图的私有引用。同时为这些视图实现get()方法,您可以从MainActivity
更改它们。
例如:
public class PersonaggiPrincipali extends Fragment {
private Button fragButton;
public PersonaggiPrincipali(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.personaggi_principali, container, false);
fragButton = (Button) rootView.findViewById(R.id.fragButtonId); //replace R.id.fragButtonId with the appropriate Id from your xml layout
return rootView;
}
public Button getFragButton() {
return this.fragButton;
}
}
答案 1 :(得分:1)
Ciao Christian,当你实例化一个Fragment
时,除了Fragment
之外你没有得到一个观点。
onCreateView
方法只是片段生命周期的一部分,您必须返回片段的主视图。此外,如果您的片段有Button
,则可以在片段的onCreateView
方法中设置侦听器。
http://developer.android.com/reference/android/app/Fragment.html#onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle)
示例:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.personaggi_principali, container, false);
Button button = (Button) rootView.findViewById(R.id.REPLACE_WITH_YOUR_BUTTON_ID);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// do you stuff here...
}
});
return rootView;
}
请注意示例中的Button只是一个局部变量,如果以后需要访问它,最好将其声明为类变量。
关于沟通(Fragment
到Fragment
,托管Activity
到Fragment
),我认为您需要了解的所有内容都在官方文档中得到了充分解释:{{3 }}