这就是我认为这里的基本java问题:
这适用于Android项目。我有这个设置:
public class MyFragmentActivity extends FragmentActivity implements
ActionBar.TabListener {
// lots of code edited out
public static class RateFragment extends Fragment {
// lots of code edited out
class InsertTask extends AsyncTask<String, String, Void> {
protected void onPostExecute(Void v) { {
// I need to access ReviewTask here
new ReviewTask().execute();
}
}
}
public static class ReviewFragment extendsListFragment {
class ReviewTask extends AsyncTask<String, String, Void> {
// code
}
}
}
我真的在问一个基本的Java问题。我知道它不是Android中最好的方法。
如果你必须知道我在做什么:(如果这是令人困惑的,这个信息是低优先级,只是对于某些上下文)我在RateFragment中按下按钮时调用InsertTask并将数据插入MySQL数据库。这就是我想在上面的代码中做的事情:在InsertTask中,最后,在另一个内部类中调用ReviewTask。这将更新列表视图(位于其他选项卡中)。
可以从InsertTask到达ReviewTask吗?
答案 0 :(得分:4)
我认为你不能这样做。我刚试了一下。以下是你可以做的事情......在片段内部有一个InsertTask的postExecute()方法调用的方法。在此片段方法中,您可以创建新的ReviewTask并触发任务。这样你的内部类就会与你的父类对话,它作为调用之间的委托。
编辑:
public class MyFragment extends FragmentActivity {
private void delegateMethod(Object result) {
TaskB b = new TaskB();
b.doanotherthing(result);
}
class TaskA {
...
public void onPostExecute() {
Object result = new Object();
delegateMethod(result);
}
}
class TaskB {
public void doanotherthing(Object o) {
...
}
}
}
答案 1 :(得分:1)
如果您将RateFragment的声明更改为非静态,则可以调用
class InsertTask extends AsyncTask<String, String, Void> {
protected void onPostExecute(Void v) { {
MyFragmentActivity.this.(new RateFragment()).(new ReviewTask()).execute();
}
}
由于您的InsertTask仍在MyFragmentActivity的实例中,因此关键字this
仍可使用,您只需使用this
告诉它“MyFragmentActivity.this
”。请注意,这是类名,而不是实例名。