0

Я знаю, что это очень простой вопрос, но я новичок в разработке Android, поэтому, пожалуйста, успокойся.
Проблема, которая у меня есть, находится в одном из фрагментов (специально для AsyncTask), который лежит в моей основной деятельности. AsyncTask отправляет данные в php-скрипт, который затем возвращает данные в формате json. Затем он обрабатывается и сохраняется в массиве jsonlist. До тех пор, пока почта не выполнит все работает, мелкие данные загружаются, обрабатываются и т. Д. Однако, когда программа достигает сообщений, проблемы запуска начинают выходить. И в принципе я не в состоянии перечислить все данные из jsonlist в ListViewКак заполнить ListView с помощью адаптеров

//setting up an array 
    ArrayList<HashMap<String, String>> jsonlist = new ArrayList<HashMap<String, String>>(); 
    //creating list view variable 
    ListView listview; 
    //Define work in progress dialog 
    private ProgressDialog mProgressDialog; 

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

      // Create a progressdialog 
      mProgressDialog = new ProgressDialog(getActivity()); 

      // Set progressdialog title 
      mProgressDialog.setTitle("Please wait"); 

      // Set progressdialog message 
      mProgressDialog.setMessage("Fetching data..."); 
      mProgressDialog.setIndeterminate(false); 

     } 

     @Override 
     protected Boolean doInBackground(String... params) { 
      //To do in the background 
      //Define variable of JSON parser type 
      JSONParser jParser = new JSONParser(); 

      //Pass url to json parser class to fetch and save it into array variable 
      JSONArray json = jParser.getJSONFromUrl(url); 

      //loop from 0 to length of an array by increasing by 1 
      for (int i = 0; i < json.length(); i++) { 

       //Try and catch routine to prevent any crashes 
       try { 
        //Get an object defined in { ... } in original json file 
        JSONObject c = json.getJSONObject(i); 

        //Separate object by obtaining values for each of the sections 
        String vtitle = c.getString(title); 
        String vcontent = c.getString(content); 
        String vuser = c.getString(user); 

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

        //Fill up an array with data extracted 
        map.put(title, vtitle); 
        map.put(content, vcontent); 
        map.put(user, vuser); 

        //Add values into jsonlist 
        jsonlist.add(map); 

       } catch (JSONException e) 
       { 
        //In case of any error Stack trace will be returned 
        e.printStackTrace(); 
       } 
      } 
      //Once everything has been done return null value 
      return null; 
     } 
     @Override 
     protected void onPostExecute(Boolean aBoolean) { 
      //Insert all data downloaded through list adapter 
      ListAdapter adapter = new SimpleAdapter(getActivity(), jsonlist, R.layout.list_activity, new String[] { title, content, user }, new int[] { R.id.title, R.id.content, R.id.user }); 

      // Locate the listview 
      //listview = (ListView) findViewById(R.id.list); 

      // Set the adapter to the ListView 
      //listview.setAdapter(adapter); 

      //Get rid off dialog when operation of fetching data has been done 
      if (mProgressDialog.isShowing()) { 
       mProgressDialog.dismiss(); 
      } 
     } 
    } 

Как вы можете видеть, я попробовал комментируемой код, но listview = (ListView) findViewById(R.id.list); возвращает следующую ошибку:

Cannot resolve method findViewById(int)

, которая мешает мне выполнение программы. Это очень расстраивает, потому что у меня буквально есть все данные, которые мне нужны в массиве, но только одна строка кода мешает мне отображать ее.

Я также попытался:

ListAdapter adapter = new SimpleAdapter(context, jsonlist, R.layout.list_activity, new String[] { title, content, user }, new int[] { R.id.title, R.id.content, R.id.user }); 
    setListAdapter(adapter); 
    lv = getListView(); 

Но, как и в предыдущем случае ошибки неразрешенных метода возвращается. Что связано с тем, что фрагмент продлен фрагмента и добавив ничего он выходит из строя он

public class Fragment2 extends Fragment, ListActivity {...} 

ответ

1

Добавьте это в ваш код в Fragment2 классе.

private ListView listview; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.YOUR_FRAGMENT_LAYOUT, container, false); 

    listview = (ListView) v.findViewById(R.id.R.id.list); 
    return v; 
} 
+0

Спасибо! Он работал так, как я этого хотел. – 5m0k3

1

Поскольку вы в фрагменте вы должны вызвать getView() перед тем findViewById, как этот

//Insert all data downloaded through list adapter 
ListAdapter adapter = new SimpleAdapter(getActivity(), jsonlist, R.layout.list_activity, new String[] { title, content, user }, new int[] { R.id.title, R.id.content, R.id.user }); 

// Locate the listview 
listview = (ListView) getView().findViewById(R.id.list); 
Смежные вопросы