2016-10-16 2 views
-2

Я использую NavigationDrawer в своем проекте, у меня есть MainNavigationFragmentActivity для управления двумя фрагментами: HomeFragment и SettingsFragment.Реализовать действия в фрагменте андроида

Теперь я хочу использовать HomeFragment для осуществления деятельности (ManufacturerActivity)

мой HomeFragment класс:

public class HomeFragment extends Fragment { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.test1, container, false); 

    GridView gridView = (GridView) view.findViewById(R.id.gridview); 
    gridView.setAdapter(new MyAdapter(getActivity())); 

    return view; 
    } 
} 

мой ManufacturerActivity класс: (этот класс будет получать JSON от URL)

public class ManufacturerActivity extends ListActivity { 

// Connection detector 
ConnectionDetector cd; 

// Alert dialog manager 
AlertDialogManager alert = new AlertDialogManager(); 

// Progress Dialog 
private ProgressDialog pDialog; 

// Creating JSON Parser object 
JSONParser jsonParser = new JSONParser(); 

ArrayList<HashMap<String, String>> albumsList; 

// albums JSONArray 
JSONArray albums = null; 

// albums JSON url 
private static final String URL_ALBUMS = "my URL"; 

// ALL JSON node names 
private static final String TAG_ID = "id"; 
private static final String TAG_NAME = "name"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.manufacturer_activity); 

    cd = new ConnectionDetector(getApplicationContext()); 

    // Check for internet connection 
    if (!cd.isConnectingToInternet()) { 
     // Internet Connection is not present 
     alert.showAlertDialog(ManufacturerActivity.this, "Internet Connection Error", 
       "Please connect to working Internet connection", false); 
     // stop executing code by return 
     return; 
    } 

    // Hashmap for ListView 
    albumsList = new ArrayList<HashMap<String, String>>(); 

    // Loading Albums JSON in Background Thread 
    new LoadCars().execute(); 

    // get listview 
    ListView lv = getListView(); 

    /** 
    * Listview item click listener 
    * TrackListActivity will be lauched by passing album id 
    * */ 
    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int arg2, 
           long arg3) { 
      // on selecting a single album 
      // TrackListActivity will be launched to show tracks inside the album 
      Intent i = new Intent(getApplicationContext(), CategoryCarActivity.class); 

      // send album id to tracklist activity to get list of songs under that album 
      String album_id = ((TextView) view.findViewById(R.id.album_id)).getText().toString(); 
      i.putExtra("album_id", album_id); 

      startActivity(i); 
     } 
    }); 
} 

/** 
* Background Async Task to Load all Albums by making http request 
* */ 
class LoadCars extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread Show Progress Dialog 
    * */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(ManufacturerActivity.this); 
     pDialog.setMessage("Listing Albums ..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    /** 
    * getting Albums JSON 
    * */ 
    protected String doInBackground(String... args) { 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 

     // getting JSON string from URL 
     String json = jsonParser.makeHttpRequest(URL_ALBUMS, "GET", 
       params); 

     // Check your log cat for JSON reponse 
     Log.d("Albums JSON: ", "> " + json); 

     try { 
      albums = new JSONArray(json); 
      if (albums != null) { 
       // looping through All albums 
       for (int i = 0; i < albums.length(); i++) { 
        JSONObject c = albums.getJSONObject(i); 

        // Storing each json item values in variable 
        String id = c.getString(TAG_ID); 
        String name = c.getString(TAG_NAME);       

        // creating new HashMap 
        HashMap<String, String> map = new HashMap<String, String>(); 

        // adding each child node to HashMap key => value 
        map.put(TAG_ID, id); 
        map.put(TAG_NAME, name); 
        // map.put(TAG_SONGS_COUNT, songs_count); 

        // adding HashList to ArrayList 
        albumsList.add(map); 
       } 
      }else{ 
       Log.d("Albums: ", "null"); 
      } 

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

     return null; 
    } 

    /** 
    * After completing background task Dismiss the progress dialog 
    * **/ 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog after getting all albums 
     pDialog.dismiss(); 
     // updating UI from Background Thread 
     runOnUiThread(new Runnable() { 
      public void run() { 
       /** 
       * Updating parsed JSON data into ListView 
       * */ 
       ListAdapter adapter = new SimpleAdapter(
         ManufacturerActivity.this, albumsList, 
         R.layout.list_item_manufacturers, new String[] { TAG_ID, 
         TAG_NAME }, new int[] { 
         R.id.album_id, R.id.album_name }); 

       // updating listview 
       setListAdapter(adapter); 
      } 
     }); 

    } 

} 

Как я могу реализовать ManufacturerActi vity в HomeFragment и получить данные ListView от JSON? Thank so much !!

+0

Вы должны переместить 'LoadAlbums' в свой собственный файл Java. Затем вы можете выполнить AsyncTask из фрагмента. Вы также можете следить за этим сообщением, если хотите. http://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is-a –

+0

Другой вариант: Проведите некоторое исследование того, как использовать Дооснащение, если вы собираетесь использовать HTTP + JSON –

ответ

0

Вы не можете реализовать Activity in Fragment. Вы можете сделать шаги ниже, чтобы получить данные в фрагменте.

  1. Получите данные json в классе Activity, нажав URL.
  2. Сохраните данные json с помощью SharedPrefs или Database или любого другого метода.
  3. Теперь, в Фрагменте, получите сохраненные данные json и отобразите их в списке.
+0

SharedPreferences, вероятно, является плохим выбором. Почему нельзя вызывать AsyncTask из фрагмента и загружать список? –

+0

Это можно назвать, но если данные необходимы в активности, тогда нет необходимости делать избыточные вызовы. – Sanjeet

+0

Hi Cricket_007, приятно познакомиться. Я думаю, что вы правы, я прочитал API android и вижу, что я должен использовать AsyncTask для этого случая. – luongkhanh

Смежные вопросы