2017-07-01 5 views
-5

Hallo Freunde im Entwickeln von Android-App mit Fragmenten in einem Viewpager, aber jetzt möchte ich JSON-Daten in das fragment.my parse.my Frage ist, wie kann ich Anzahl der Fragmente als die Größe der JSON-Daten festlegen und die JSON-Daten in das erforderliche Fragment einfügen Bitte helfen Sie mir, es im Internet seit Stunden zu suchen, aber enttäuschende Ergebnisse, also bitte helfen Sie mir. Danke im Voraus! mit C_Id = 14 im zweiten FragmentWie werden JSON-Daten in Fragmente zerlegt?

[{"c_id":13,"category_name":"PUBLICATIONS","imagename":"http://goringr.com/church_project/churchimagesnew/publications.jpg","ctype":"church"},{"c_id":14,"category_name":"YOUTH ASSOCIATION","imagename":"http://goringr.com/church_project/churchimagesnew/youthassociation.jpg","ctype":"church"}] 

dies ist mein json Daten und alle i ist möchte mit C_Id = 13 in erste Fragment und Anzeigeinhalte des Objektinhalte des Objekts anzuzeigen.

MainActivity.java

package project1.test; 

import android.content.Intent; 
import android.support.design.widget.CollapsingToolbarLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends AppCompatActivity { 
public static final String data = "hello"; 
FragmentPagerAdapter adapterViewPager; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //  Toolbar tool = (Toolbar)findViewById(R.id.tool); 
    //  setSupportActionBar(tool); 
    //  getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    ViewPager vpPager = (ViewPager) findViewById(R.id.vpPager); 
    adapterViewPager = new MyPagerAdapter(getSupportFragmentManager()); 
    vpPager.setAdapter(adapterViewPager); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.sample_actions, menu); 
    return true; 
} 

public static class MyPagerAdapter extends FragmentPagerAdapter { 
    private static int NUM_ITEMS = 3; 

    public MyPagerAdapter(FragmentManager fragmentManager) { 
     super(fragmentManager); 
    } 

    // Returns total number of pages 
    @Override 
    public int getCount() { 
     return NUM_ITEMS; 
    } 

    // Returns the fragment to display for that page 
    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return FirstFragment.newInstance(0, "Fragment1"); 
      case 1: 
       return FirstFragment.newInstance(1, "Fragment2"); 
      case 2: 
       return SecondFragment.newInstance(2, "Fragment3"); 
      default: 
       return null; 
     } 
    } 

    // Returns the page title for the top indicator 
    @Override 
    public CharSequence getPageTitle(int position) { 
     return "Page " + position; 
    } 

} 

} 

FirstFragment

public class FirstFragment extends Fragment { 
// Store instance variables 
private String title; 
private int page; 

// newInstance constructor for creating fragment with arguments 
public static FirstFragment newInstance(int page, String title) { 
    FirstFragment fragmentFirst = new FirstFragment(); 
    Bundle args = new Bundle(); 
    args.putInt("someInt", page); 
    args.putString("someTitle", title); 
    fragmentFirst.setArguments(args); 
    return fragmentFirst; 
} 

// Store instance variables based on arguments passed 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setHasOptionsMenu(true); 
    page = getArguments().getInt("someInt", 0); 
    title = getArguments().getString("someTitle"); 
} 

// Inflate the view for the fragment based on layout XML 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

; 
    View view = inflater.inflate(R.layout.fragment_first, container, false); 
//  TextView tvLabel = (TextView) view.findViewById(R.id.tvLabel); 
////  tvLabel.setText(page + " -- " + title); 


    CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout)view.findViewById(R.id.collapsing_toolbar1); 
    collapsingToolbarLayout.setTitle("black panther"); 

    return view; 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    // TODO Add your menu entries here 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.sample_actions, menu); 
} 
} 

SecondFragment

public class SecondFragment extends Fragment { 
// Store instance variables 
private String title; 
private int page; 
Button tryit; 

// newInstance constructor for creating fragment with arguments 
public static SecondFragment newInstance(int page, String title) { 
    SecondFragment fragmentSecond = new SecondFragment(); 
    Bundle args = new Bundle(); 
    args.putInt("someInt", page); 
    args.putString("someTitle", title); 
    fragmentSecond.setArguments(args); 
    return fragmentSecond; 
} 

// Store instance variables based on arguments passed 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    page = getArguments().getInt("someInt", 0); 
    title = getArguments().getString("someTitle"); 
} 

// Inflate the view for the fragment based on layout XML 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_second, container, 
    false); 
    tryit = (Button) view.findViewById(R.id.tryit); 
    tryit.setOnClickListener(new Button.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(getActivity(),ManagingProfile.class); 
      startActivity(intent); 
     } 
    }); 
//  TextView tvLabel = (TextView) view.findViewById(R.id.tvLabel); 
//  tvLabel.setText(page + " -- " + title); 
    return view; 
} 
} 
+1

wie die Tatsache, dass es Fragment macht einen Unterschied macht? –

+0

Verzeihen Sie mir, ich bin ein Anfänger nur ich Monat Erfahrung .... Ich weiß, wie JSON Daten zu benutzerdefinierten Listview zu parsen, aber wenn es um Fragment im ein bisschen verwirrt. –

Antwort

0

können Sie pars e wie folgt aus:

List<RidesData> ridesDatas; /* this is should be parcelable */ 
private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(FragmentAbout.newInstance(ridesDatas), "ABOUT"); 
    adapter.addFragment(FragmentPointOfInterest.newInstance(ridesDatas),"POI"); 

    viewPager.setAdapter(adapter); 
     } 

und setzen constructure so zu jedem Fragment:

FragmentAbout.class

public static FragmentAbout newInstance(List<RidesData> ridesDatas) { 
     FragmentAbout fragmentAbout = new FragmentAbout(); 
     Bundle arg = new Bundle(); 
     arg.putParcelableArrayList("data", (ArrayList<? extends Parcelable>) ridesDatas); 
     fragmentAbout.setArguments(arg); 
     return fragmentAbout; 
    } 

FragmentPointOfInterest.class

public static FragmentPointOfInterest newInstance(List<RidesData> ridesDatas) { 
     FragmentPointOfInterest fragmentPointOfInterest = new FragmentPointOfInterest(); 
     Bundle arg = new Bundle(); 
     arg.putParcelableArrayList("data", (ArrayList<? extends Parcelable>) ridesDatas); 
     fragmentPointOfInterest.setArguments(arg); 
     return fragmentPointOfInterest; 
    } 

und jeweils Daten von json erhalten in onViewCreated() Methode des Fragments wie folgt:

Sie haben 2 Position von Daten in JSON.

[0] = c_id=13 
[1] = c_id=14 

so in erstem Fragmente 0 gesetzt Position:

RidesData data = ridesData.get(0); 

und in zweiten Fragmente Satz 1 postion:

RidesData data = ridesData.get (1);

@Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     ridesData = new ArrayList<>(); 
     ridesData = getArguments().getParcelableArrayList("data"); 
     RidesData data = ridesData.get(1);  
    } 
+0

Vielen Dank für Ihre Antwort, aber diese Fragmente sind statisch leid, in meiner Frage nicht zu erwähnen, dass ich eine dynamische Fragmentierung brauche. Betrachten Sie ein Szenario, in dem ein Benutzer ein weiteres JSON-Objekt (wobei c_id vielleicht 15 oder andere) im JSON-Array hinzufügt und ich möchte es in automatisch erstellten Fragment anzeigen, ohne das Fragment statisch mit addfragment() method.assume, als ob es 5 JSON-Objekte im JSON-Array und was ich will, ist automatisch 5 Fragmente zu erstellen, um jedes JSON-Objekt Inhalt in jedem zu erstellen fragment.hope meine erklärung ist klar. jede hilfe wird geschätzt. –

+0

ich bereits oben erwähnt .. in meinem Beispiel ridesData enthalten JSON-Daten. in meiner rideData-Objektposition 0 = erste json-Objektdaten. Position 1 = zweite Objektdaten .. keine Angabe wie viele JSON Objekt Sie hinzufügen .. Sie können nach Position erhalten. –

+0

und Sie müssen nicht mehrere Fragmente für jedes Objekt erstellen. Sie können jede Position des JSON-Objekts in einem Fragment abrufen. jedes Mal wird nur die genaue Position der JSON-Objektdaten angezeigt. –

-1

Sie müssen den benutzerdefinierten Adapter verwenden, um die JSON-Daten zu extrahieren und Halter anzuzeigen, um die Daten zu drucken. beziehen Sie sich auf diese link

+0

Dies ist für die Fragmentfrage irrelevant. – RileyManda

Verwandte Themen