Java 按钮侦听器不工作
布局包含按钮1的片段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
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调用对您放入片段的特定活动的引用。一个类可以有不同的实例。这个方法获取片段连接到的路径