2013-11-29 1 views
0

Моей проблемы: Этот код не работает в моей деятельности я пытаюсь реализовать GridView адаптера, который получает данные от parse.comonPostExecute в фрагменте не работает (работает в деятельности)

@Override 
    protected void onPostExecute(Void result) { 
     // Locate the gridview in gridview_main.xml 
     gridview = (GridView) findViewById(R.id.gridview); 
     // Pass the results into ListViewAdapter.java 
     adapter = new GridViewAdapter(MainActivity.this, 
       phonearraylist); 
     // Binds the Adapter to the ListView 
     gridview.setAdapter(adapter); 
     // Close the progressdialog 
     mProgressDialog.dismiss(); 
    } 
} 
} 

Это в мой класс "DiscoverActivity", что exteds SherlockFragment

общественного класса DiscoverActivity расширяет SherlockFragment

// Declare Variables 
GridView gridview; 
List<ParseObject> ob; 
ProgressDialog mProgressDialog; 
ImageAdapter adapter; 
private List<ImageList> phonearraylist = null; 

@Override 
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.activity_discover,container,false); 
//  GridView gridView = (GridView) view.findViewById(R.id.gridview); 
//  gridView.setAdapter(new ImageAdapter(view.getContext())); // uses the view to get the context instead of getActivity(). 
    new RemoteDataTask().execute(); 
    return view; 
} 

private class RemoteDataTask extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

//   Toast.makeText(getActivity(), "hello",Toast.LENGTH_LONG).show(); 
     Toast.makeText(getActivity().getApplicationContext(),"Loading...",Toast.LENGTH_LONG).show(); 

    } 

protected Void doInBackground(Void... params) { 
    // Create the array 
    phonearraylist = new ArrayList<ImageList>(); 
    try { 
     // Locate the class table named "SamsungPhones" in Parse.com 
     ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
       "testData2"); 
     // Locate the column named "position" in Parse.com and order list 
     // by ascending 
     query.orderByAscending("Price"); 
     ob = query.find(); 
     for (ParseObject country : ob) { 
      ParseFile image = (ParseFile) country.get("Photo"); 
      ImageList map = new ImageList(); 
      map.setPhone(image.getUrl()); 
      phonearraylist.add(map); 
     } 
    } catch (ParseException e) { 
     Log.e("Error", e.getMessage()); 
     e.printStackTrace(); 
    } 
    return null; 
} 

//Here is what I have tried so far... 
@Override 
protected void onPostExecute(Void result) { 
    // Locate the gridview in gridview_main.xml 
    gridview = (GridView) findViewById(R.id.gridview); 
    // Pass the results into ListViewAdapter.java 
    //adapter = new ImageAdapter(DiscoverActivity.this, 
     //  phonearraylist); 
    GridView gridView = (GridView) view.findViewById(R.id.gridview); 
    gridView.setAdapter(new ImageAdapter(view.getContext())); // uses the view to get the context instead of getActivity(). 
    // Binds the Adapter to the ListView 
    gridview.setAdapter(adapter); 
    // Close the progressdialog 
    mProgressDialog.dismiss(); 
} 
} 
} 

Я undable к findViewById в моем onPostExecute

Заранее благодарим за любую помощь, которую вы можете мне дать!

+0

тот факт, что вы создали представление не означает, что оно находится в иерархии и может быть найдено. вам нужно начать свою асинтезу в более поздний момент. – njzk2

+0

Почему вы прокомментировали строку, которая создала 'GridView' внутри метода' onCreate() ', похоже, это подходящее место для получения указателя на представление? – Scott

+0

Он работал так, потому что я тестировал свой макет, прежде чем пытаюсь получить данные из внешнего источника. Я следую этому руководству, в котором я получаю эту информацию из [link] (http://www.androidbegin.com/tutorial/android-parse-com-gridview-tutorial/) – Derek

ответ

0

Вы написали это заявление в методе onCreate? (от деятельности)

setContentView(R.layout.some_activity); 

, то вы можете использовать все определенные здесь идентификаторы.

0

В примере, на который вы ссылались, родительский класс представляет собой операцию, которая имеет метод findViewById(), ваш родительский класс SherlockFragment этого не делает. Поэтому вам нужно получить ссылку на gridView, используя макет, который вы надуваете в onCreate() (как вы это делали), я говорю это, полагая, что GridView находится в макете.

Поскольку ваш AsyncTask является внутренний класс имеет доступ к переменным экземпляра внешнего класса (ваш класс фрагмент), вы можете создать указатель на GridView в onCreate() и использовать его в onPostExecute()