【发布时间】:2021-11-03 01:16:36
【问题描述】:
总结问题
各位开发者,
所以.. 我正在寻找一个 PopupMenù,它出现在单击以下图标时,该图标停留在 ListView 中的项目上。我想在点击时出现一个带有一些选项的弹出栏
描述您的尝试
我尝试按照有关创建弹出菜单的教程进行操作,但方法始终相同,对此我没有任何问题。但它在 Logcat 上向我显示了这个 Null Pointer 错误,我尝试通过初始化 ImageView 来修复,但目前没有任何正确的方法..
例如,我尝试执行“image = (Imageview)findviewbyId(R.id.imagesrc)”之类的操作,但它总是出现以下错误:
java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.isilente/com.example.isilente.HomePage}:java.lang.NullPointerException:尝试调用虚拟方法 'void android.widget.ImageView.setOnClickListener (android.view.View$OnClickListener)' 在空对象引用上
适当时,显示一些代码
我在编码时遇到这种情况:
类 -> Homepage.java
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
}
在资源/菜单中:
<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>
然后我得到了这个,它是 ListView 上的 Item..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:这是 LogCat :
2021-09-05 20:20:19.629 9883-9883/com.example.isilente E/AndroidRuntime: 致命异常: main 进程:com.example.isilente,PID:9883 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.isilente/com.example.isilente.HomePage}: java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)' 在空对象引用上 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 引起:java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)' 在空对象引用上 在 com.example.isilente.HomePage.onCreate(HomePage.java:94) 在 android.app.Activity.performCreate(Activity.java:8000) 在 android.app.Activity.performCreate(Activity.java:7984) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
块引用 块引用 块引用
【问题讨论】:
-
嗨,这看起来不像一个完整的例子(
GetStart定义在哪里?)。如果您将其缩减为一个完整的工作示例(创建一个新的干净项目并在那里尝试),您会发现您会得到更好的答案,该示例只有您正在尝试做的一件事(例如,使用单个 ImageView 和添加一个 onClickListener 到它)。
标签: java android xml android-studio android-listview