简体   繁体   English

按钮将不会打开新活动

[英]Button won't open new activity

So im trying to make my buttons open new activities within my navigation drawer fragments but something broke in my MainActivity.java 所以我试图让我的按钮在导航抽屉片段中打开新的活动,但是MainActivity.java中出现了问题

my MainActivity.java.... 我的MainActivity.java ....

   package east.myapplication;


   import android.support.design.widget.NavigationView;
   import android.support.v4.widget.DrawerLayout;
   import android.support.v7.app.ActionBarDrawerToggle;
   import android.support.v7.app.AppCompatActivity;
   import android.os.Bundle;
   import android.support.v7.widget.Toolbar;
   import android.view.MenuItem;

   public class MainActivity extends AppCompatActivity {
   DrawerLayout drawerLayout;
   Toolbar toolbar;
   ActionBarDrawerToggle actionBarDrawerToggle;
   android.support.v4.app.FragmentTransaction fragmentTransaction;
   NavigationView navigationView;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,    toolbar, R.string.drawer_open,
            R.string.drawer_close);

    drawerLayout.setDrawerListener((actionBarDrawerToggle));

    fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.main_container,new HomeFragment());
    fragmentTransaction.commit();
    getSupportActionBar().setTitle("Home Fragment...");
    navigationView = (NavigationView)findViewById(R.id.navigation_view);
    navigationView.setNavigationItemSelectedListener(new     NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            switch (item.getItemId())
            {
                case R.id.home_id:
                    fragmentTransaction =   getSupportFragmentManager().beginTransaction();
                    fragmentTransaction.replace(R.id.main_container, new   HomeFragment());
                    fragmentTransaction.commit();
                    getSupportActionBar().setTitle("Home Fragment");
                    item.setChecked(true);
                    drawerLayout.closeDrawers();
                    break;

                case R.id.id_rewards:
                    fragmentTransaction =   getSupportFragmentManager().beginTransaction();
                    fragmentTransaction.replace(R.id.main_container, new  RewardsFragment());
                    fragmentTransaction.commit();
                    getSupportActionBar().setTitle("Rewards");
                    item.setChecked(true);
                    drawerLayout.closeDrawers();
                    break;

                case R.id.id_settings:
                    fragmentTransaction =   getSupportFragmentManager().beginTransaction();
                    fragmentTransaction.replace(R.id.main_container, new   SettingsFragment());
                    fragmentTransaction.commit();
                    getSupportActionBar().setTitle("Settings Fragment");
                    item.setChecked(true);
                    drawerLayout.closeDrawers();
                    break;
            }



            return true;
        }
    });

}


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

}

and my rewardsfragment... 和我的奖励片段...

    package east.myapplication;

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;


    public class RewardsFragment extends Activity {

    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_rewards);
    Button button = (Button) findViewById(R.id.button);
    Button anotherButton = (Button) findViewById(R.id.button2);
    Button anotherButton2 = (Button) findViewById(R.id.button3);
    Button anotherButton3 = (Button) findViewById(R.id.button4);
    Button anotherButton4 = (Button) findViewById(R.id.button5);
    Button anotherButton5 = (Button) findViewById(R.id.button6);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Intent intent = new Intent(RewardsFragment.this, AmazonActivity.class);
            RewardsFragment.this.startActivity(intent);
        }
    });

     /* new button to open a new activity */
    anotherButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // creating the intent
            Intent intent = new Intent(RewardsFragment.this, CVSActivity.class);
            // starting activity with the created intent
            startActivity(intent);
        }
    });

     /* new button to open a new activity */
    anotherButton2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // creating the intent
            Intent intent = new Intent(RewardsFragment.this, SephoraActivity.class);
            // starting activity with the created intent
            startActivity(intent);
        }
    });

     /* new button to open a new activity */
    anotherButton3.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // creating the intent
            Intent intent = new Intent(RewardsFragment.this,    PlayStationActivity.class);
            // starting activity with the created intent
            startActivity(intent);
        }
    });

     /* new button to open a new activity */
    anotherButton4.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // creating the intent
            Intent intent = new Intent(RewardsFragment.this,    AMCActivity.class);
            // starting activity with the created intent
            startActivity(intent);
        }
    });

     /* new button to open a new activity */
    anotherButton5.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // creating the intent
            Intent intent = new Intent(RewardsFragment.this,             BKActivity.class);
            // starting activity with the created intent
            startActivity(intent);
        }
    });
}

} }

The problem is fragmentTransaction.replace(R.id.main_container, new RewardsFragment()); 问题是fragmentTransaction.replace(R.id.main_container, new RewardsFragment()); it has a red underline under RewardsFragment and i dont know how to fix it 它在RewardsFragment下有一个红色的下划线,我不知道如何解决

I tried everything and this is what I have so far.. 我尝试了一切,这就是我到目前为止所拥有的。

    package east.myapplication;

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.app.FragmentTransaction;
    import android.view.View;
    import android.widget.Button;
    import android.support.v4.app.Fragment;


    public class RewardsFragment extends Fragment {

    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_rewards);
    Button button = (Button) findViewById(R.id.button);
    Button anotherButton = (Button) findViewById(R.id.button2);
    Button anotherButton2 = (Button) findViewById(R.id.button3);
    Button anotherButton3 = (Button) findViewById(R.id.button4);
    Button anotherButton4 = (Button) findViewById(R.id.button5);
    Button anotherButton5 = (Button) findViewById(R.id.button6);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Intent intent = new Intent(RewardsFragment.this, AmazonActivity.class);
            RewardsFragment.this.startActivity(intent);
        }
    });

 /* new button to open a new activity */
    anotherButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // creating the intent
            Intent intent = new Intent(RewardsFragment.this, CVSActivity.class);
            // starting activity with the created intent
            startActivity(intent);
        }
    });

 /* new button to open a new activity */
    anotherButton2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // creating the intent
            Intent intent = new Intent(RewardsFragment.this, SephoraActivity.class);
            // starting activity with the created intent
            startActivity(intent);
        }
    });

 /* new button to open a new activity */
    anotherButton3.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // creating the intent
            Intent intent = new Intent(RewardsFragment.this,    PlayStationActivity.class);
            // starting activity with the created intent
            startActivity(intent);
        }
    });

 /* new button to open a new activity */
    anotherButton4.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // creating the intent
            Intent intent = new Intent(RewardsFragment.this,    AMCActivity.class);
            // starting activity with the created intent
            startActivity(intent);
        }
    });

 /* new button to open a new activity */
    anotherButton5.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // creating the intent
            Intent intent = new Intent(RewardsFragment.this,    BKActivity.class);
            // starting activity with the created intent
            startActivity(intent);
        }
    });}

} }

My setContentView is bright red, my findViewByID is red, and lastly (RewardsFragment.this, AmazonActivity.class); 我的setContentView是亮红色的,我的findViewByID是红色的,最后是(RewardsFragment.this,AmazonActivity.class); is red along with all my other .class's 和其他所有.class一样是红色的

Here is my bugs 这是我的虫子

Error:(25, 9) error: cannot find symbol method setContentView(int) 错误:(25,9)错误:找不到符号方法setContentView(int)

Error:(26, 34) error: cannot find symbol method findViewById(int) 错误:(26、34)错误:找不到符号方法findViewById(int)

Error:(27, 41) error: cannot find symbol method findViewById(int) 错误:(27、41)错误:找不到符号方法findViewById(int)

Error:(28, 42) error: cannot find symbol method findViewById(int) 错误:(28、42)错误:找不到符号方法findViewById(int)

Error:(29, 42) error: cannot find symbol method findViewById(int) 错误:(29、42)错误:找不到符号方法findViewById(int)

Error:(30, 42) error: cannot find symbol method findViewById(int) 错误:(30,42)错误:找不到符号方法findViewById(int)

Error:(31, 42) error: cannot find symbol method findViewById(int) 错误:(31,42)错误:找不到符号方法findViewById(int)

Error:(34, 33) error: no suitable constructor found for Intent(RewardsFragment,Class) constructor Intent.Intent(String,Uri) is not applicable (argument mismatch; RewardsFragment cannot be converted to String) constructor Intent.Intent(Context,Class) is not applicable (argument mismatch; RewardsFragment cannot be converted to Context) 错误:(34、33)错误:没有为Intent(RewardsFragment,Class)构造函数Intent.Intent(String,Uri)找到合适的构造函数(参数不匹配; RewardsFragment无法转换为String)构造函数Intent.Intent(Context,类)不适用(参数不匹配; RewardsFragment无法转换为Context)

Error:(43, 33) error: no suitable constructor found for Intent(RewardsFragment,Class) constructor Intent.Intent(String,Uri) is not applicable (argument mismatch; RewardsFragment cannot be converted to String) constructor Intent.Intent(Context,Class) is not applicable (argument mismatch; RewardsFragment cannot be converted to Context) 错误:(43,33)错误:没有为Intent(RewardsFragment,Class)构造函数Intent.Intent(String,Uri)找到合适的构造函数(参数不匹配; RewardsFragment无法转换为String)构造函数Intent.Intent(Context,类)不适用(参数不匹配; RewardsFragment无法转换为Context)

Error:(53, 33) error: no suitable constructor found for Intent(RewardsFragment,Class) constructor Intent.Intent(String,Uri) is not applicable (argument mismatch; RewardsFragment cannot be converted to String) constructor Intent.Intent(Context,Class) is not applicable (argument mismatch; RewardsFragment cannot be converted to Context) 错误:(53、33)错误:找不到适用于Intent(RewardsFragment,Class)的合适构造函数Intent.Intent(String,Uri)不适用(参数不匹配; RewardsFragment无法转换为String)构造函数Intent.Intent(Context,类)不适用(参数不匹配; RewardsFragment无法转换为Context)

Error:(63, 33) error: no suitable constructor found for Intent(RewardsFragment,Class) constructor Intent.Intent(String,Uri) is not applicable (argument mismatch; RewardsFragment cannot be converted to String) constructor Intent.Intent(Context,Class) is not applicable (argument mismatch; RewardsFragment cannot be converted to Context) 错误:(63、33)错误:没有为Intent(RewardsFragment,Class)构造函数Intent.Intent(String,Uri)找到合适的构造函数不适用(参数不匹配; RewardsFragment无法转换为String)构造函数Intent.Intent(Context,类)不适用(参数不匹配; RewardsFragment无法转换为Context)

Error:(73, 33) error: no suitable constructor found for Intent(RewardsFragment,Class) constructor Intent.Intent(String,Uri) is not applicable (argument mismatch; RewardsFragment cannot be converted to String) constructor Intent.Intent(Context,Class) is not applicable (argument mismatch; RewardsFragment cannot be converted to Context) 错误:(73,33)错误:没有为Intent(RewardsFragment,Class)构造函数Intent.Intent(String,Uri)找到合适的构造函数(参数不匹配; RewardsFragment无法转换为String)构造函数Intent.Intent(Context,类)不适用(参数不匹配; RewardsFragment无法转换为Context)

Error:(83, 33) error: no suitable constructor found for Intent(RewardsFragment,Class) constructor Intent.Intent(String,Uri) is not applicable (argument mismatch; RewardsFragment cannot be converted to String) constructor Intent.Intent(Context,Class) is not applicable (argument mismatch; RewardsFragment cannot be converted to Context) 错误:(83,33)错误:没有为Intent(RewardsFragment,Class)构造函数Intent.Intent(String,Uri)找到合适的构造函数(参数不匹配; RewardsFragment无法转换为String)构造函数Intent.Intent(Context,类)不适用(参数不匹配; RewardsFragment无法转换为Context)

Error:Execution failed for task ':app:compileDebugJavaWithJavac'. 错误:任务':app:compileDebugJavaWithJavac'的执行失败。

Compilation failed; 编译失败; see the compiler error output for details. 有关详细信息,请参见编译器错误输出。

public class RewardsFragment extends Activity

Your "Fragment" actually is an Activity. 您的“片段”实际上是一个活动。

Change this to extend Fragment and add a blank public constructor, ie 更改它以扩展Fragment并添加一个空白的公共构造函数,即

public class RewardsFragment extends Fragment {

    public RewardsFragment(){
    //Default blank constructor 
    }

    //The rest of your code here

}

On a completely off note, you should really consider using Butterknife for @Bind and @Onclick instead of so many findViewByIds and click listeners in your code. 需要特别注意的是,您应该真正考虑对@Bind和@Onclick 使用Butterknife ,而不要在代码中使用那么多的findViewByIds和click侦听器。 It will help start to clean it up. 这将有助于开始清理它。

You must 你必须

RewardsFragment extend Fragment 

import android.support.v4.app.Fragment;

And

anotherButton3.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        // creating the intent
        Intent intent = new Intent(getActivity,    PlayStationActivity.class);
        // starting activity with the created intent
        getActivity.startActivity(intent);
    }
});

Replace 更换

 case R.id.home_id:
                fragmentTransaction =   getSupportFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.main_container, new   HomeFragment());
                fragmentTransaction.commit();
                getSupportActionBar().setTitle("Home Fragment");
                item.setChecked(true);
                drawerLayout.closeDrawers();
                break;

To

 FragmentManager manager = getSupportFragmentManager();
    manager.beginTransaction()
            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
            .replace(R.id.content_main, new HomeFragment())
            .commit();

This is example extend Fragment 这是扩展片段的例子

public class SettingFragment extends Fragment implements View.OnClickListener {
private TextView mTextTest;
 private TextView mTextTest1;


@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_setting, container, false);
    addControl(view);

    return view;
}



private void addControl(View view) {
    mTextTest = (TextView) view.findViewById(R.id.text_test);
mTextTest1 = (TextView) view.findViewById(R.id.text_test_1);
    mTextTest.setOnClickListener(this);
  mTextTest1.setOnClickListener(this);

}


@Override
public void onClick(View v) {

    FragmentManager manager = getActivity().getSupportFragmentManager();
    switch (v.getId()) {
        case R.id.text_test:
            manager.beginTransaction()
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .replace(R.id.content_main, new YourFragment())
                    .commit();
            break;
   case R.id.text_test_1:
  startActivity(new Intent(getActivity(), YourActivity.class))
            break;
        default:
            break;
    }

}

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM