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;
}