2016-11-08 7 views
0

A_Activity内に3つのフラグメントが追加されました。これらはfragment_1あり、fragment_2、私はここで非同期タスクから戻るときに、アクティビティにフラグメントが添付されない

async_class非同期クラスを呼び出していますfragment_1から

をfragment_3は私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); 
     }); 
} 

} 

私はバックグラウンドで、ポストにいくつかのタスクを実行しますexecudeは、私はこれらのコード

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がないことを示していますアクティビティに関連付けられます。

何が問題になりましたか? どうすればこの問題を解決できますか?

おかげ

答えて

0

しかし、私はfragment_1ののsetTitleメソッドに戻り、任意の リスト項目をクリックしたときには、現在の新しいオブジェクトを作成するのでfragment_1が活動

に接続されていないことを示しますsetTitleメソッドを呼び出すためのFragment_1

TrainingGetDataクラスに現在のフラグメントコンテキストを渡して、Contextを渡すのと同じ方法で、setTitleメソッドを呼び出します。 like:

Fragment_1 fragment_1;

public TrainingGetData(Context context,Fragment_1 fragment_1){ 
    mContext=context; 
    this.fragment_1=fragment_1; 
} 

TrainingGetDataオブジェクトの作成:あなたのFragment Fragment_1のfragment_1オブジェクトがあなたのAsyncTask TrainingGetData内でインスタンス化されていますので、あなたがエラーを取得している

mTrainingGetData = new TrainingGetData(getContext(),Fragment_1.this); 
+0

それを使用されていません。私は、また、パラメータとして – supertramp

+0

@supertrampを渡す必要があります:私は、オーバーレイを使用してこれを行ったインターフェイス –

+1

を使用してカスタムイベントリスナーを作成するには、フラグメント2とフラグメント_3からTrainingGetData()助けをありがとう – supertramp

0

を。これはActivityに接続されているFragmentオブジェクトではありません。

問題を解決するために、あなたは以下に示すようにfragment_1オブジェクトを初期化する必要があります。

fragment_1 = (Fragment) mContext; 

ConstructorAsyncTaskのTrainingGetDataで上記のコード行を書きます。

+0

はい私は再びインスタンス化しました。助けてくれてありがとう – supertramp

0

フラグメントの新しいインスタンスを作成しているとき。

Fragment_1 fragment_1=new Fragment_1(); 

これらはTrainingGetDataコンストラクタで

使用フラグメントのインスタンスを仕事に行くと、それはfragment_1のために働く

public TrainingGetData(Context context, Fragment_1 fragment_1) { 
     mContext = context; 
     this.fragment_1 = fragment_1; 
    } 
+0

はい、問題でした。助けてくれてありがとう – supertramp

+0

あなたは私の答えを受け入れることができますか? –

+0

私の評判が15未満です – supertramp

関連する問題