Моей проблемы: Этот код не работает в моей деятельности я пытаюсь реализовать 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
Заранее благодарим за любую помощь, которую вы можете мне дать!
тот факт, что вы создали представление не означает, что оно находится в иерархии и может быть найдено. вам нужно начать свою асинтезу в более поздний момент. – njzk2
Почему вы прокомментировали строку, которая создала 'GridView' внутри метода' onCreate() ', похоже, это подходящее место для получения указателя на представление? – Scott
Он работал так, потому что я тестировал свой макет, прежде чем пытаюсь получить данные из внешнего источника. Я следую этому руководству, в котором я получаю эту информацию из [link] (http://www.androidbegin.com/tutorial/android-parse-com-gridview-tutorial/) – Derek