2017-04-22 14 views
1

JSONからデータを取得し、一部のデータをすべてのフラグメントに送信しようとしています。私は配列リストとn=jsonArray.length();でJSON値取得したこの前JSONデータをアクティビティからフラグメントに送信する方法は?

private void setupViewPager(ViewPager viewPager,ArrayList<Product> productname,int p) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     Bundle args = new Bundle(); 
} 
     String price = productname.get(1).getPrice(); 
     args.putString("key", price); 
     TheFragment tf1 = new TheFragment(); 
     TheFragment tf2 = new TheFragment(); 
     TheFragment tf3 = new TheFragment(); 
     TheFragment tf4 = new TheFragment(); 
     adapter.addFragment(tf1 , "ONE"); 
     tf1.setArguments(args); 
     adapter.addFragment(tf2 , "Two"); 
     tf2.setArguments(args); 
     adapter.addFragment(tf3 , "Three"); 
     tf3.setArguments(args); 
     adapter.addFragment(tf4 , "Four"); 
     tf4.setArguments(args); 

//3  adapter.addFragment(new TheFragment(), "TWO"); // Can I send data by coding this way? 
//3  adapter.addFragment(new TheFragment(), "THREE"); 
//3  adapter.addFragment(new TheFragment(),"THE 4"); 
     viewPager.setAdapter(adapter); 
    } 

: はここに私のコードです。

setupViewPager(viewPager,arrayList,n); 

JSONファイルには名前、価格、画像が含まれています。私は断片に価格を表示したい。

public class TheFragment extends Fragment { 

    TextView tv; 
    public TheFragment() { 

    } 
    String value = getArguments().getString("key"); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    /* if(value!=null){ 
      tv.setText(value); 
     } */ 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_this, container, false); 
     tv = (TextView) getView().findViewById(R.id.thePrice); 
     tv.setText(value); 
     return view; 
    } 
} 

コードはエラーを表示していませんが、アプリケーションは実行されていません。私がやっている間違いや解決策はありますか?ありがとう。

+0

は、jsonを送信するときにあなたのフラグメントが既に開いています。 –

+0

私のフラグメントは、何も送信しなかったときに開いていますが、データを送信しようとしていて、フラグメントレイアウトのテキストビューにテキストを設定したい場合、それは機能しません。 – Saket

答えて

0

変更コードのこの行あなたのfragment-

public class TheFragment extends Fragment { 

    TextView tv; 
    public TheFragment() { 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_this, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     tv = (TextView) view.findViewById(R.id.thePrice); 
    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     String price = getArguments().getString("key"); 
     tv.setText(price); 
    } 
} 

に希望はうまく動作します。

+0

どのように動作するのですか?フラグメントが既に上にあるので、onActivityCreated()内で値を取得しません。 –

+0

@jiteshmohiteコードを実行しました。これは、viewPager.setAdapter(アダプタ)が引数を設定した後に呼び出されるために機能します。すべてのデータがプリロードされています。したがって、アダプタがフラグメントを添付するときは、確実にonActivityCreated()を徹底的に実行します。 – MMBarno

+0

ありがとう、それは今働いています:) – Saket

0

こんにちは、以下のようにフラグメント内にnewInstanceメソッドを使用します。

TheFragment theFragment= TheFragment.newInstance("arrayListHere"); 

使用方法以下のように

public static Fragment newInstance(ArrayList<Product> jsonData) { 

      Bundle args = new Bundle(); 
      args.putStringArrayList("Key","jsonDatainArray"); 
      fragment.setArguments(args); 
      return fragment; 
} 

して初期化フラグメントはonCreateViewまたはフラグメントでonCreateでのArrayListを取得します。

+0

あなたはjson文字列としてもデータを入れることができます。 –

関連する問題