我在A_Activity中添加了三个片段。这些是fragment_1,fragment_2,fragment_3
来自fragment_1的我正在调用异步类async_class
这是我的Fragment_1:
public class Fragment_1 extends Fragment {
ListView listView;
private TrainingGetData mTrainingGetData = null;
Context mContext;
public Fragment_1(){
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_1, container, false);
mTrainingGetData = new TrainingGetData(getContext());
mTrainingGetData.execute((String) null);
return view;
}
public void setTitle(Context context, ArrayList<String> ids, ArrayList<String> titles, final ArrayList<String> urls){
final Activity activity=(Activity) context;
final ArrayAdapter adapter=new ArrayAdapter(context, android.R.layout.simple_list_item_1, titles);
listView=(ListView) ((Activity) context).findViewById(R.id.listView_1);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent myIntent = new Intent(activity, AnotherActivity.class);
myIntent.putExtra("url", urls.get(position));
startActivity(myIntent);
});
}
}
在async类中我在后台执行一些任务,在post executionde中我添加了这些代码
public class TrainingGetData extends AsyncTask<String, String, String> {
Fragment_1 fragment_1=new Fragment_1();
public TrainingGetData(Context context){
mContext=context;
}
@Override
protected String doInBackground(String... params) {
try {
//do the processing
}
catch (JSONException e) {
e.printStackTrace();
return "JSON Data Parse Error";
}
catch (Exception e){
e.printStackTrace();
return "Unknown Error: Insert/Update Failed";
}
return null;
}
@Override
protected void onPostExecute(String message) {
if(success == 0 && message.equals("No files found")){
Toast.makeText(mContext, "Sorry No Data Found", Toast.LENGTH_SHORT).show();
}
if(success==1) {
//do the processing
fragment_1.setTitle(mContext, ids, titles, urls);
}
}
}
但当我返回fragment_1 setTitle方法并单击任何列表项时,它会显示fragment_1未附加到Activity。
出了什么问题? 我该如何解决这个问题?
由于
答案 0 :(得分:0)
但是当我返回fragment_1 setTitle方法并点击任何方法时 列表项显示fragment_1未附加到活动
因为当前正在创建Fragment_1
的新对象来调用setTitle
方法。
在TrainingGetData
类中传递当前片段上下文的方式与传递Context相同,然后调用setTitle
方法。像:
Fragment_1 fragment_1;
public TrainingGetData(Context context,Fragment_1 fragment_1){
mContext=context;
this.fragment_1=fragment_1;
}
并创建TrainingGetData
对象:
mTrainingGetData = new TrainingGetData(getContext(),Fragment_1.this);
答案 1 :(得分:0)
您收到错误是因为Fragment
Fragment_1的fragment_1对象已在AsyncTask
TrainingGetData中实例化。这不是与Fragment
相关联的Activity
对象。
为了解决这个问题,你需要初始化fragment_1对象,如下所示:
fragment_1 = (Fragment) mContext;
将以上代码行写在Constructor
TrainingGetData的AsyncTask
中。
答案 2 :(得分:0)
在创建片段的新实例时。
Fragment_1 fragment_1=new Fragment_1();
这些不起作用
在TrainingGetData构造函数中使用片段实例并使用它
public TrainingGetData(Context context, Fragment_1 fragment_1) {
mContext = context;
this.fragment_1 = fragment_1;
}