Java Android Studio中的片段事务错误

Java Android Studio中的片段事务错误,java,android-fragments,android-studio,Java,Android Fragments,Android Studio,我是Android编程的noob,在处理片段时遇到了一个错误,它说我不能从静态上下文引用非静态方法(beginTransaction)。代码如下: public class User extends ActionBarActivity implements AdapterView.OnItemClickListener{ private ActionBarDrawerToggle actionBarDrawerToggle; private DrawerLayout drawerLayout;

我是Android编程的noob,在处理片段时遇到了一个错误,它说我不能从静态上下文引用非静态方法(beginTransaction)。代码如下:

public class User extends ActionBarActivity implements AdapterView.OnItemClickListener{

private ActionBarDrawerToggle actionBarDrawerToggle;
private DrawerLayout drawerLayout;
private ListView navList;
private android.support.v4.app.FragmentTransaction fragmentTransaction;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user);
    //DrawerLayout    (za xml)
    DrawerLayout drawerLayout = (DrawerLayout)findViewById(R.id.drawerlayout);
    ListView navList = (ListView)findViewById(R.id.navlist);
            ArrayList<String> navArray = new ArrayList<String>();
    navArray.add("Latest");
    navArray.add("Popular conversations");
    navArray.add("New Message");
    navArray.add("Settings");
    navArray.add("Log out");
    navList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_activated_1,navArray);
    navList.setAdapter(adapter);
    navList.setOnItemClickListener(this);

    actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,R.string.opendrawer,R.string.closedrawer);
    drawerLayout.setDrawerListener(actionBarDrawerToggle);
    android.support.v7.app.ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowHomeEnabled(true);
    actionBar.setDisplayHomeAsUpEnabled(true);
    android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
   // delete phps?

    loadSelection(0);
}


// *** Yes, I'm aware of the errors down below..
@Override
private void loadSelection(int i){
navList.setItemChecked(i, true);
 switch(i){
     case 0:
         homefragment homefragment = new homefragment();
         fragmentTransaction = FragmentManager.beginTransaction();
         fragmentTransaction.replace(R.id.fragmentholder, homefragment);
         fragmentTransaction.commit();
         break;
     //ostali slucajevi l8er..

     case 3:
         NewMsg NewMsg = new NewMsg();
         fragmentTransaction = FragmentManager.beginTransaction();      // <-----  ??????????
         fragmentTransaction.replace(R.id.fragmentholder,NewMsg);
         fragmentTransaction.commit();
         break;
    }
}

 protected void onPostCreate(Bundle savedInstanceState) {
     super.onPostCreate(Bundle savedInstanceState);
     actionBarDrawerToggle.syncState();
 }



 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_user, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    } else if (id == android.R.id.home) {
        if (drawerLayout.isDrawerOpen(navList)) {
            drawerLayout.closeDrawer(navList);
        } else {
            drawerLayout.openDrawer(navList);
        }
    }
        return super.onOptionsItemSelected(item);

    }


@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

   loadSelection(position);

drawerLayout.closeDrawer(navList);
}
}
公共类用户扩展ActionBarActivity实现AdapterView.OnItemClickListener{
私人动作bardrawertoggle动作bardrawertoggle;
私人抽屉布局;
私有列表视图导航列表;
私有android.support.v4.app.FragmentTransaction FragmentTransaction;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u用户);
//抽屉布局(za xml)
抽屉布局抽屉布局=(抽屉布局)findViewById(R.id.抽屉布局);
ListView navList=(ListView)findViewById(R.id.navList);
ArrayList navArray=新的ArrayList();
navArray.add(“最新”);
添加(“流行对话”);
添加(“新消息”);
添加(“设置”);
添加(“注销”);
navList.setChoiceMode(ListView.CHOICE\u MODE\u SINGLE);
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u activated\u 1,navArray);
设置适配器(适配器);
setOnItemClickListener(this);
actionBarDrawerToggle=新的actionBarDrawerToggle(this,drawerLayout,R.string.opendrawer,R.string.closedrawer);
抽屉布局。setDrawerListener(actionBarDrawerToggle);
android.support.v7.app.ActionBar ActionBar=getSupportActionBar();
actionBar.setDisplayShowHomeEnabled(真);
actionBar.setDisplayHomeAsUpEnabled(true);
android.support.v4.app.FragmentManager FragmentManager=getSupportFragmentManager();
//删除PHP?
负荷选择(0);
}
//***是的,我知道下面的错误。。
@凌驾
专用void加载选择(int i){
navList.setItemChecked(i,true);
开关(一){
案例0:
homefragment homefragment=新的homefragment();
fragmentTransaction=FragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragmentholder,homefragment);
fragmentTransaction.commit();
打破
//ostali slucajevi l8er。。
案例3:
NewMsg NewMsg=new NewMsg();

fragmentTransaction=FragmentManager.beginTransaction();//这实际上与片段无关,但更一般。FragmentManager.beginTransaction()的问题
是指
FragmentManager
是对类的静态引用,而您应该将该方法调用为类的对象。解决方法是使用

getSupportFragmentManager().beginTransaction();

或者,您可以添加

android.support.v4.app.FragmentManager fragmentManager;
然后您可以在
onCreate
方法中的代码中执行

android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
仅使用

fragmentManager = getSupportFragmentManager();
自从您声明您的类具有变量
fragmentManager
以来,它就起作用了。然后在出现错误的代码中,将大写的
fragmentManager
替换为
fragmentManager


编辑:阅读代码时出错,后一种方法现在也可以使用。

不要使用外部链接!