Java 如何将ListActivity转换为AppActivity

Java 如何将ListActivity转换为AppActivity,java,android,android-studio,android-listview,Java,Android,Android Studio,Android Listview,我想将我的活动父级从ListActivity更改为AppCompatActivity,因为我需要使用授予的检查权限,它需要AppCompat,但我的活动是ListView。 我尝试了此操作,但未收到良好效果:( 这是我的源代码(曾经有过…,没有添加代码): 我改为: public class RingtoneSelectActivity extends AppCompatActivity { 但我在这行中收到了一些错误: ... setListAdapter(m

我想将我的活动父级从ListActivity更改为AppCompatActivity,因为我需要使用授予的检查权限,它需要AppCompat,但我的活动是ListView。 我尝试了此操作,但未收到良好效果:(

这是我的源代码(曾经有过…,没有添加代码):

我改为:

public class RingtoneSelectActivity extends AppCompatActivity {
但我在这行中收到了一些错误:

...
                setListAdapter(mAdapter);

                getListView().setItemsCanFocus(true);

                getListView().setOnItemClickListener(new OnItemClickListener() { ... });
...
            registerForContextMenu(getListView());

我的错误:

  • 无法解析方法“setListAdapter”(android.widget.SimpleCursorAdapter)
  • 无法解析方法“getListView()”
如何修复这些错误

[编辑]

我的日志:

E/ACRA: ACRA caught a NullPointerException for ir.ari.mp3cutter
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.SimpleCursorAdapter.changeCursor(android.database.Cursor)' on a null object reference
        at ir.ari.mp3cutter.RingtoneSelectActivity.refreshListView(RingtoneSelectActivity.java:621)
        at ir.ari.mp3cutter.RingtoneSelectActivity.onOptionsItemSelected(RingtoneSelectActivity.java:314)
        at android.app.Activity.onMenuItemSelected(Activity.java:2908)
        at com.android.internal.policy.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1151)
        at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761)
        at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
        at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:904)
        at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894)
        at com.android.internal.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:200)
        at android.widget.AdapterView.performItemClick(AdapterView.java:310)
        at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
        at android.widget.AbsListView$PerformClick.run(AbsListView.java:3042)
        at android.widget.AbsListView$3.run(AbsListView.java:3879)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
第304至319行:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.action_about:
            RingtoneEditActivity.onAbout(this);
            return true;
        case R.id.action_record:
            onRecord();
            return true;
        case R.id.action_show_all_audio:
            mShowAll = true;
            refreshListView();
            return true;
        default:
            return false;
        }
    }
第619行至第622行:

    private void refreshListView() {
        String filterStr = mFilter.getQuery().toString();
        mAdapter.changeCursor(createCursor(filterStr));
    }

[注意:我很抱歉我说的不好,因为我的英语学得不好:)

所以不要更改超类,只需使用
ContextCompat.checkSelfPermission()
检查未授权权限,然后通过
ActivityCompat.requestPermissions()
请求权限,并获得以下结果:

@Override
public void onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }
@覆盖
请求时公共无效许可证结果(
请求代码:Int,
权限:数组,
格兰特结果:因塔雷
) {
super.onRequestPermissionsResult(请求代码、权限、GrantResult)
}
@Override
public void onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }