2017-02-23 8 views
1

同じビューに2つのFragmentがあり、フラグメントは水平リサイクルビューでjsonデータを取得します。データがjsonから来たときにフラグメントの線量が表示されない

最初の断片をMainActivityから開きます。

最初のフラグメントからフラグメントを開くことはできますが、最初のフラグメントを開くことはできませんfragmentsfragmentの場合は、jsonから取得します。

私の最初のコードfragmentは、MainActivityからオープンしました。

MainFrog.class

public class MainFrog extends Fragment { 

// CONNECTION_TIMEOUT and READ_TIMEOUT are in milliseconds 
private static final String TAG = "MainFrog"; 
public static final int CONNECTION_TIMEOUT = 10000; 
public static final int READ_TIMEOUT = 15000; 
private RecyclerView mRVMainFrog; 
private AdapterMain mAdapter; 
String url = "URL"; 
List<String> data = new ArrayList<>(); 
JSONParser jParser = new JSONParser(); 
JSONArray sectionArr = null; 
String sections = "sections"; 
String sectionName = "section_name"; 
Context context; 
TextView searchOnSelect; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_main); 
    //Make call to AsyncTask 
    new AsyncLogin().execute(); 
} 


private class AsyncLogin extends AsyncTask<String, String, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(String... args) { 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     // getting JSON string from URL 
     JSONObject json = jParser.makeHttpRequest(url, "GET", params); 

     // Check your log cat for JSON reponse 
     Log.d("All Products: ", json.toString()); 

     try { 

      sectionArr = json.getJSONArray(sections); 

      // looping through All Items 
      Log.e(TAG, "doInBackground: " + sectionArr); 
      for (int i = 0; i < sectionArr.length(); i++) { 
       JSONObject c = sectionArr.getJSONObject(i); 

       Log.e(TAG, "doInBackground: " + c); 
       // Storing each json item in variable 
       String name = c.getString(sectionName); 
       Log.e(TAG, "doInBackground: " + name); 
       //HashMap<String, String> map = new HashMap<String, String>(); 

       // adding each child node to HashMap key => value 
       //map.put("", name); 

       // adding HashList to ArrayList 
       data.add(String.valueOf(name)); 

      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 


    @Override 
    protected void onPostExecute(String result) { 

    //    
    //`RecyclerView chipRecyclerView =` 
    // (RecyclerView)findViewById(R.id.recyclerView); 
     mAdapter = new AdapterMain(getActivity(), data); 
     // updating listview 
     //mRVFishPrice.setAdapter(mAdapter); 

     // Setup and Handover data to recyclerview 
     LinearLayoutManager layoutManager 
       = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false); 

     mRVMainFrog.setLayoutManager(layoutManager); 
     mRVMainFrog.setAdapter(mAdapter); 
    } 
} 


Fragment fragment; 

public MainFrog() { 


} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View inflatedMainView = inflater.inflate(R.layout.mainfrog, null); 
    View infaltedMain = inflater.inflate(R.layout.activity_main, null); 
    View mainLayout = infaltedMain.findViewById(R.id.detailsContent); 
    mRVMainFrog = (RecyclerView) inflatedMainView.findViewById(R.id.mainRecycleView); 
    searchOnSelect = (TextView) mainLayout.findViewById(R.id.searchOnSelect); 
    ItemClickSupport.addTo(mRVMainFrog).setOnItemClickListener(new ItemClickSupport.OnItemClickListener() { 
     @Override 
     public void onItemClicked(RecyclerView recyclerView, int position, View v) { 
      // do it 
      if (position == 0) { 
       fragment = new CarFrog(); 
       replaceFragment(fragment); 
       searchOnSelect.setVisibility(View.VISIBLE); 
      } else if (position == 1) { 
       fragment = new BuildFrog(); 
       replaceFragment(fragment); 
       searchOnSelect.setVisibility(View.VISIBLE); 
      } else if (position == 2) { 
       fragment = new DeviceFrog(); 
       replaceFragment(fragment); 
       searchOnSelect.setVisibility(View.VISIBLE); 
      } else if (position == 3) { 
       fragment = new DeviceFrog(); 
       replaceFragment(fragment); 
       searchOnSelect.setVisibility(View.VISIBLE); 
      } 
     } 
    }); 

    return inflatedMainView; 
} 

と私のreplaceFragmentのように見える:

public void replaceFragment(Fragment someFragment) { 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.replace(R.id.carLayout, someFragment); 
    transaction.addToBackStack("abc"); 
    transaction.commit(); 
} 

repkaceFragment方法は、まずlayout以下第二layout、 と交換しますが、私は最初のレイアウト(firstfragment)と交換したときにそれがです仕事

2番目の断片は、静的なデータですが、position == 0 の場合は動作しません。

CarFrog.class 

私がLogCarFrog.classMainFrog.class

で使用したのと同じコードを持っては非常によくデータを取得するが、fragment dosen'tが表示されます。

UPDATE:デバッグ後

CarFrog mAdapterリターンヌルを開くに。?

recycleView return null too

が、私はMainFrogを開くが、それが仕事だときのケースでは、nullを返します。

+0

mRVMainFrogはどこに宣言されていますか? –

+0

@ZakiPathan –

+0

新しいAsyncLogin()を呼び出します。レイアウト項目が宣言された後にonCreateViewで'RecyclerView chipRecyclerView =' (RecyclerView)を削除します。findViewById(R.id.recyclerView); AsyncTaskから。これを試してみてください –

答えて

0

アップロードできるかどうかログには何が役立つでしょうか? 私はあなたがasyntaskからUIスレッドに触れようとしていると思うし、それは可能ではありません、 あなたはあなたがuiスレッドで行うことを囲む必要があります。

これもログなしでは、これは非常に一般的な質問であるため、推測するのは少し難しいです。

多分このフラグは、呼び出しにUIスレッドで実行され、レイアウトの項目が宣言した後onCreateViewに呼び出しnew AsyncLogin().execute();

+0

ええのデータが非常によく受信し、フラグメントが開いたが、論理エラーので –

+0

は何を示唆ですか? –

0

ビューに新しいフラグメントをアップロードする機能となっているときにデータが受信されたときに表示してみてください。 AsyncTaskからRecyclerView chipRecyclerView = (RecyclerView)findViewById(R.id.recyclerView);を削除します。フラグメントはonCreateViewを持っているので、だから、これはあなたを助けonCreateView

mRVMainFrog = (RecyclerView) inflatedMainView.findViewById(R.id.mainRecycleView); 
//Execute AsyncTask here 
new AsyncLogin().execute(); 

ホープnew AsyncLogin().execute();を追加onCreateを削除します。何か問題が残っている場合は、お気軽にお問い合わせください。

+0

作業していません... –

+0

あなたのコードを更新してください。何かエラーが来る? –

+0

いいえ、それは動作しません、移動後AsuncLogin –

関連する問題