Android 如何从适配器调用外部活动方法?

Android 如何从适配器调用外部活动方法?,android,android-recyclerview,android-arrayadapter,android-adapter,android-connectivitymanager,Android,Android Recyclerview,Android Arrayadapter,Android Adapter,Android Connectivitymanager,我试图从适配器中调用外部类方法 new MainActivity().openPainRecordDialog(context,dbHelper); 它工作得很好 但是当我喜欢这个的时候 Boolean status=new MainActivity().openPainRecordDialog(context,dbHelper); if(status) check(); check是适配器类的方法 及 我犯了一个错误 系统服务在onCreate之前不可用于活动 在这一行代码中,Co

我试图从适配器中调用外部类方法

new MainActivity().openPainRecordDialog(context,dbHelper);
它工作得很好

但是当我喜欢这个的时候

Boolean status=new MainActivity().openPainRecordDialog(context,dbHelper);

if(status)
   check();
check是适配器类的方法

我犯了一个错误 系统服务在onCreate之前不可用于活动 在这一行代码中,ConnectivityManager cm=ConnectivityManager getSystemServiceContext.CONNECTIVITY\u服务

问题:

这是调用activity方法的正确方法吗。 2.为什么我会犯这个错误。 编辑

我试着通过接口来做这件事。 但最终还是会出错

空对象引用上的“int self.anotherclassfunction.SimpleAdapter$AdapterCallback.onMethodCallback”

适配器类

我尝试调用其方法的活动:

public class MainActivity extends AppCompatActivity implements SimpleAdapter.AdapterCallback {

    private SimpleAdapter mAdapterCallback;

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

        this.mAdapterCallback=new SimpleAdapter(MainActivity.this);


        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

    @Override
    public int onMethodCallback() {
        // do something
        return 2;
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


    public void test(View v)
    {
        startActivity(new Intent(MainActivity.this,OtherClass.class));
        finish();
    }

    public int sampleFunction()
    {
        return 2;
    }
}
为什么不像这样在Utils类中创建isNetworkConnected并根据需要调用任意位置呢

private boolean isNetworkConnected(Context context) {
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null) {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null) {
                for (int i = 0; i < info.length; i++) {
                   if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                        return true;
                }
            }
        }
    }
    return false;
}

您需要将上下文传递给isNetworkConnected方法

openPainRecordDialog(final Context context, final DbHelper dbHelper)
{
  if (logged_in && isNetworkConnected(context))
{
  }
}
public boolean isNetworkConnected(Conext context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        return cm.getActiveNetworkInfo() != null;
    }

您到底想在适配器中执行什么操作?新建MainActivity您永远不应该调用Activity派生类的构造函数。。。alsked Bazmillion times…在适配器中这样使用`ConnectivityManager cm=ConnectivityManager context.getSystemServiceContext.CONNECTIVITY_服务`适配器类中有一个复选框,当用户单击此复选框时,会出现一个对话框,它的声明位于外部类活动中,并且其状态会发送回适配器类。然后,它调用另一个基于状态在适配器类中声明的方法@那我该怎么称呼@Selvin呢
public class MainActivity extends AppCompatActivity implements SimpleAdapter.AdapterCallback {

    private SimpleAdapter mAdapterCallback;

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

        this.mAdapterCallback=new SimpleAdapter(MainActivity.this);


        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

    @Override
    public int onMethodCallback() {
        // do something
        return 2;
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


    public void test(View v)
    {
        startActivity(new Intent(MainActivity.this,OtherClass.class));
        finish();
    }

    public int sampleFunction()
    {
        return 2;
    }
}
private boolean isNetworkConnected(Context context) {
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null) {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null) {
                for (int i = 0; i < info.length; i++) {
                   if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                        return true;
                }
            }
        }
    }
    return false;
}
openPainRecordDialog(final Context context, final DbHelper dbHelper)
{
  if (logged_in && isNetworkConnected(context))
{
  }
}
public boolean isNetworkConnected(Conext context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        return cm.getActiveNetworkInfo() != null;
    }