当前位置: 首页 > 知识库问答 >
问题:

当我在ImageView上放置onClickListener时,它会使我的应用程序崩溃

龚威
2023-03-14

总结问题
你好,开发人员,所以。。我想做一个弹出菜单,点击下面的图标,它就会出现在列表视图中的一个项目上。我想这样做,点击出现一个带有一些选项的弹出栏

描述一下你的尝试
我试着按照有关创建弹出式菜单的教程进行操作,但方法总是一样的,我对此没有问题。但它在Logcat上显示了这个空指针错误,我试图用初始化ImageView来修复它,但目前没有任何进展。。例如,我尝试执行“image=(Imageview)findviewbyd(R.id.imagesrc)”之类的操作,但总是出现以下错误:

JAVAlang.RuntimeException:无法启动活动组件信息{com.example.isilente/com.example.isilente.HomePage}:java。lang.NullPointerException:尝试调用虚拟方法“void”。小装置。ImageView。空对象引用上的setOnClickListener(android.view.view$OnClickListener)“”

在适当的时候,显示一些代码
我对编码有这种情况:类-

public class HomePage extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

DrawerLayout drawerLayout;
NavigationView navigationView;
Toolbar toolbar;
private AppCompatButton getstart, augurio;


//new stuff
private ArrayList<Music> my_mainarraylist;
private MusicAdapter my_musicadapter;
private ListView listView_songs;
ImageView imageView_puntini;
//end new stuff



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_page);
    getstart=findViewById(R.id.GetStart);
    imageView_puntini=findViewById(R.id.imageview_puntini);
    listView_songs=findViewById(R.id.listview_buongiorno);


    //START NEW STUFF
    my_mainarraylist=new ArrayList<>();
    my_mainarraylist.add(new Music("Buongiorno#1", "Pozione Polisucchio", R.raw.silente, R.id.imageview_play, R.id.imageview_stop, R.id.imageview_puntini));
    my_mainarraylist.add(new Music("Augurio", "Hai dato il massimo", R.raw.massimo, R.id.imageview_play, R.id.imageview_stop, R.id.imageview_puntini));

    MusicAdapter adapter = new MusicAdapter(this, R.layout.songs_item_listview,my_mainarraylist);
    listView_songs.setAdapter(adapter);



    listView_songs.setVisibility(View.GONE);
    //FINE NEW STUFF

    /*----Hooks----*/
    drawerLayout = findViewById(R.id.drawerLayout);
    navigationView = findViewById(R.id.nav_view);
    toolbar = findViewById(R.id.toolbar);
    /*----Toolbar----*/
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    /*----NavigationDrawerMenu----*/

    //Menu menu = navigationView.getMenu();

    navigationView.bringToFront();
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar,R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawerLayout.addDrawerListener(toggle);
    toggle.syncState();
    //navigationView.setCheckedItem(R.id.nav_home);

    navigationView.setNavigationItemSelectedListener(this);

    getstart.setOnClickListener(v -> listView_songs.setVisibility(View.VISIBLE));

    //popup
    imageView_puntini.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PopupMenu popupMenu = new PopupMenu(HomePage.this, v);
            MenuInflater menuInflater = popupMenu.getMenuInflater();
            menuInflater.inflate(R.menu.menuset, popupMenu.getMenu());
            popupMenu.show();
        }
    });
    //popup end
}

在res/菜单中:

   <menu><item
    android:id="@+id/item_settings"
    android:title="Settings"
    android:showAsAction="ifRoom|withText"
    />
<item
    android:id="@+id/item_about"
    android:title="About"
    android:showAsAction="ifRoom|withText"
    /></menu>

然后我得到了这个,它是列表视图上的项目...songs-item-listview.xml:

 <?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:background="#152238"
    android:paddingLeft="5dp"
    android:paddingRight="16dp">

    <ImageView
        android:id="@+id/audio_microfono"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic__431742_audio_communication_instrument_media_microphone_icon"
        />

    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textview_songs"
        android:text="Current song"
        android:textStyle="bold"
        android:textColor="#eee86b"
        android:textSize="16sp"
        android:layout_toEndOf="@+id/audio_microfono"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textview_artist"
        android:text="Current artist"
        android:textStyle="italic"
        android:textColor="#eee86b"
        android:layout_toEndOf="@+id/audio_microfono"
        android:layout_below="@+id/textview_songs"
        android:textSize="16sp"
        />
    </androidx.appcompat.widget.LinearLayoutCompat>

    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:orientation="horizontal">

    <ImageView
        android:id="@+id/imageview_play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingRight="10dp"
        android:src="@drawable/ic_play"/>

    <ImageView
        android:id="@+id/imageview_stop"
        android:layout_width="wrap_content"
        android:layout_alignParentEnd="true"
        android:paddingRight="5dp"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_stop"
        />

        <ImageView
            android:id="@+id/imageview_puntini"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_trepuntini"
            />
    </androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>

有人说这可能是一个错误,因为按钮不在主活动中,但它在另一个活动中,但在任何情况下,你建议我怎么做?

Ps:这是日志:

2021-09-05 20:20:19.629 9883-9883/com。实例isilente E/AndroidRuntime:致命异常:主进程:com。实例isilente,PID:9883 java。lang.RuntimeException:无法启动活动组件信息{com.example.isilente/com.example.isilente.HomePage}:java。lang.NullPointerException:尝试调用虚拟方法“void”。小装置。ImageView。android上的空对象引用上的setOnClickListener(android.view.view$OnClickListener)”。应用程序。活动线程。在android上执行启动活动(ActivityThread.java:3449)。应用程序。活动线程。android上的handleLaunchActivity(ActivityThread.java:3601)。应用程序。服务器事务。启动ActivityItem。在android上执行(LaunchActivityItem.java:85)。应用程序。服务器事务。事务执行器。android上的executeCallbacks(TransactionExecutor.java:135)。应用程序。服务器事务。事务执行器。在android上执行(TransactionExecutor.java:95)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:2066)。操作系统。处理程序。android上的dispatchMessage(Handler.java:106)。操作系统。活套。android上的loop(Looper.java:223)。应用程序。活动线程。java上的main(ActivityThread.java:7656)。朗。反思。方法在com上调用(本机方法)。Android内部的操作系统。RuntimeInit$MethodAndArgsCaller。在com上运行(RuntimeInit.java:592)。Android内部的操作系统。合子体。main(ZygoteInit.java:947)由以下原因引起:java。lang.NullPointerException:尝试调用虚拟方法“void”。小装置。ImageView。com上的空对象引用上的setOnClickListener(android.view.view$OnClickListener)。实例伊西兰特。主页android上的onCreate(HomePage.java:94)。应用程序。活动android上的performCreate(Activity.java:8000)。应用程序。活动在android上执行创建(Activity.java:7984)。应用程序。仪器仪表。android上的callActivityOnCreate(Instrumentation.java:1309)。应用程序。活动线程。在android上执行启动活动(ActivityThread.java:3422)。应用程序。活动线程。handleLaunchActivity(ActivityThread.java:3601)

Blockquote Blockquote Blockquote

共有2个答案

东方弘壮
2023-03-14

尝试这样初始化你的PopupMenu

popup.getMenu().add(groupId, itemId, order, title);

对于要添加的每个MenuItem。您还可以查看此链接以查看其他解决方案
(我的解决方案取自此人)

淳于典
2023-03-14

请加上这个

<ImageView
            android:id="@+id/imageview_puntini"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_trepuntini"
            />

活动主页。xml其中定义了列表视图,而不是列表视图项歌曲项列表视图。xml,因为您正试图从活动中访问它。

 类似资料:
  • 当我运行以下代码时,我的应用程序崩溃: 这是我的Logcat输出: 03-26 12:35:16.900: E/AndroidRuntime(30127): FATAL EXCEPTION: main 03-26 12:35:16.900: E/AndroidRuntime(30127):java.lang.RuntimeException:无法启动活动ComponentInfo{nl.appon

  • 当我在设备上运行应用程序时单击增量按钮时,我的应用程序意外地强制执行这是我的activity_main.xml代码 这是我的mainactivity.java文件 这是调试报告05-23 22:14:45.695 297 36-29736/com.orton.birthdayCard E/AndroidRuntime:致命异常:主进程:com.orton.birthdayCard,PID:2973

  • 我创建了一个应用程序,在Android marshmallow中崩溃,而在under版本中我的应用程序正常工作。 这怎么可能?这是我的清单代码: 这是分级代码: 我读到你必须在代码中修改一些东西,使其与AndroidMarshmallow兼容。 我该如何解决问题呢?

  • 经过几天的计划,我刚刚开始为我的聊天应用程序编写一些代码,但问题是,在Gradle Build完成并将应用程序安装在我的设备上之后,它一直在崩溃。我创建了一个预计会打开新活动的按钮,但它没有这样做,而是崩溃了。在我编写任何代码之前,一切都正常,应用程序打开,logcat没有显示任何错误。以下是错误: 我试着遵循其他一些建议,但都不起作用。以下是我的代码片段: }

  • 我在我的Android应用程序中使用GSON来解析数据。我已经在模型对象中添加了枚举。添加枚举后,我的应用程序开始崩溃。当我让runProguard假的时候,一切都很好。当程序是真的时,我做了我能在网上找到的一切来修复这个问题。但还是没运气。 我已经在proguard-rule文件中做了以下事情 枚举材料示例: 我的堆栈跟踪

  • ----------在android上。应用程序。ActivityThread。android上的installProvider(ActivityThread.java:7447)。应用程序。ActivityThread。android上的installContentProviders(ActivityThread.java:6964)。应用程序。ActivityThread。android上的h