Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按钮侦听器不工作_Java_Android - Fatal编程技术网

Java 按钮侦听器不工作

Java 按钮侦听器不工作,java,android,Java,Android,布局包含按钮1的片段 package com.example.shrey.myapplication; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import

布局包含按钮1的片段

package com.example.shrey.myapplication;

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

/**
 * A simple {@link Fragment} subclass.
 */
public class PageFragment extends android.support.v4.app.Fragment {

    public PageFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.page_fragment_layout,container,false);

//      button initialisation
        Button button_a;
        button_a = view.findViewById(R.id.button1);
        button_a.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myIntent = new Intent(PageFragment.this,
                        ScrollingActivity1.class);
                startActivity(myIntent);
            }
        });

        return view;
    }

}
调试时,我收到错误信息:

java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“void android.view.view.setOnClickListenerandroid.view.view$OnClickListener”

我提供我的主要活动代码。 编辑-添加我的程序的zip文件。 注意-button1是activity_main.xml的viewpager中一个页面上的按钮。 我做了一个活动,我想在点击按钮1时显示它

activity_main.xml

主要活动

package com.example.shrey.myapplication;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.view.MenuItem;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;

import static javax.xml.datatype.DatatypeFactory.newInstance;

public class MainActivity  extends AppCompatActivity {
    private DrawerLayout drawerlayout;
    ViewPager viewpager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        drawerlayout = findViewById(R.id.drawer_layout);

        viewpager = findViewById(R.id.view_pager);
        SwipeAdapter swipeadapter = new SwipeAdapter(getSupportFragmentManager());
        viewpager.setAdapter(swipeadapter);

//        set status bar color code
        if (Build.VERSION.SDK_INT >= 21) {
            Window window = this.getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.setStatusBarColor(this.getResources().getColor(R.color.material_blue_grey_950));
        }

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        ActionBar actionbar = getSupportActionBar();
        actionbar.setDisplayHomeAsUpEnabled(true);
        actionbar.setHomeAsUpIndicator(R.drawable.ic_navdrawer);
//        <!-- code to change title and its color. -->
        actionbar.setTitle(Html.fromHtml("<font color='#ffffff'>Skill India App </font>"));

        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                        // set item as selected to persist highlight
                        menuItem.setChecked(true);
                        // close drawer when item is tapped
                        drawerlayout.closeDrawers();

                        // Add code here to update the UI based on the item selected
                        // For example, swap UI fragments here

                        return true;
                    }
                });

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                drawerlayout.openDrawer(GravityCompat.START);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

我只看到一个setOnClickListener,因此代码的问题在于:

//      button initialisation
        Button button_a;
        button_a = findViewById(R.id.button1);
        button_a.setOnClickListener(new View.OnClickListener() {
您正在创建一个名为Button_的按钮,最初为null,然后将其与findViewById绑定。问题是findViewById在内容视图中找不到任何带有id按钮1的内容,在本例中为R.layout.activity\u main。因此,当运行下一行时,按钮a仍然为null,并且您正在执行null.setOnClickListener,这是不允许的


需要更多的信息才能完全回答,正如Bhuvanesh BS所提到的,发布了您的活动_main.xml。

首先,您不能有意调用fragment类。片段是它所包含的活动的一部分。把你的活动名称放在那里

Button button_a;
        button_a = view.findViewById(R.id.button1);
        button_a.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myIntent = new Intent(MainActivity.this,
                        ScrollingActivity1.class);
                startActivity(myIntent);
            }
        });
然后,我看不到在代码中将片段添加到viewpager的位置。您需要将片段的实例添加到寻呼机中,以查看您创建的实际布局,我假设它在SwipeAdapter中

最后,去掉MainActivity类中的button1 onCLickListener


它将起作用

检查您的资源xml。可能您使用的id不在该资源中。您没有按钮1检查您的XmlPost your activity\u main.xml的可能副本我已经添加了所需的文件,您现在可以帮助我吗?我已经提供了activity\u main.xml并解释了按钮1在哪里您现在可以解释错误吗我在您的activity\u main中没有看到按钮1,这是另一种观点的一部分?您需要运行如下操作:button_a=someOtherView.findviewbydr.id.button1;看起来你的ViewPager可能会保存碎片?如果它持有不同的视图,并且按钮位于其中一个视图上,则应该是该视图处理onClick。例如,如果您的ViewPager有一些片段,其中一个片段有button1,那么该片段应该执行onClick,而不是活动。您的意思是我必须在布局xml有button1的片段中应用侦听器?是的,您的片段应该知道按钮,因此它可以执行onClick。它在意图行中显示错误。无法解析构造函数我正在添加其布局包含Button1的片段当我尝试您的代码时,它显示了错误。在上面的回答中,有人告诉我,我必须将侦听器放在包含按钮的页面上,而PageFragment包含按钮。让我解释一下整个情况,我在Pagefragment中创建了一个按钮,创建了几个片段,并从中创建了一个swipeview,然后我在一个片段中放置了一个按钮,我希望该按钮打开单击时创建的活动。现在请你解释一下,这个人是对的,你把代码放在片段中,就像我看到的那样,但是你把片段的名字放在了意图中,这是错误的。您需要使用包含此片段的活动的名称,但将意图放在片段中的当前位置,然后删除活动中的侦听器。我希望这是有意义的。或者哪一个更容易,put Intent Intent=new Intent getActivity,ScrollingActivity1.class;而不是Intent myIntent=new IntentPageFragment.this,滚动activity1.class;它奏效了,非常感谢。但是,您能否解释为什么getActivity工作,而不是前一个用于将来引用,因为getActivity调用对您放入片段的特定活动的引用。一个类可以有不同的实例。这个方法获取片段连接到的路径