Cómo utilizar findViewById en fragmento y ArrayList no se puede aplicar – Android

He tenido que cambiar una clase de que se clasifique como una actividad a un fragmento y no sé cómo lo configuraría ahora, ya que ahora dice que no puede resolver el método en mi findViewById. Cualquier código adicional se puede dar si es necesario. Gracias por ayudar.

public class CustomizedListView extends Fragment { // All static variables static final String URL = "http://api.androidhive.info/music/music.xml"; // XML node keys static final String KEY_SONG = "song"; // parent node static final String KEY_ID = "id"; static final String KEY_TITLE = "title"; static final String KEY_ARTIST = "artist"; static final String KEY_DURATION = "duration"; static final String KEY_THUMB_URL = "thumb_url"; ListView list; LazyAdapter adapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ return inflater.inflate(R.layout.main, container, false); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); XMLParser parser = new XMLParser(); String xml = parser.getXmlFromUrl(URL); // getting XML from URL Document doc = parser.getDomElement(xml); // getting DOM element NodeList nl = doc.getElementsByTagName(KEY_SONG); // looping through all song nodes <song> for (int i = 0; i < nl.getLength(); i++) { // creating new HashMap HashMap<String, String> map = new HashMap<String, String>(); Element e = (Element) nl.item(i); // adding each child node to HashMap key => value map.put(KEY_ID, parser.getValue(e, KEY_ID)); map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE)); map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST)); map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION)); map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL)); // adding HashList to ArrayList songsList.add(map); } list=(ListView)findViewById(R.id.game_list); // Getting adapter by passing xml data ArrayList adapter=new LazyAdapter(this, songsList); list.setAdapter(adapter); // Click event for single list row list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } }); } } 

Esto es lo que me causa problemas con findViewById porque no puede resolver el método:

 list=(ListView)findViewById(R.id.game_list); 

Y esto es lo que me está causando problemas en el ArrayList y aparentemente es porque LazyAdapter (android.app.Activity, ArrayList>) en LazyAdapter no se puede aplicar a (com.example.app.CustomizedListView, ArrayList>)

  // Getting adapter by passing xml data ArrayList adapter=new LazyAdapter(this, songsList); list.setAdapter(adapter); 

main.xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#e5e5e5" > <ListView android:id="@+id/game_list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="#e5e5e5" android:dividerHeight="6dp" android:background="#e5e5e5" android:layout_marginLeft="6dp" android:layout_marginRight="6dp"/> </LinearLayout> 

3 Solutions collect form web for “Cómo utilizar findViewById en fragmento y ArrayList no se puede aplicar – Android”

Su error está en el método onCreate: la creación de la vista debe ir en el método onCreateView en su lugar.

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Preparing user interface final View v = inflater.inflate(R.layout.main, container, false); final ListView = (ListView) v.findViewById(R.id.game_list); // Do what you want... return v; } 

… es porque LazyAdapter (android.app.Activity, ArrayList>) en LazyAdapter no se puede aplicar a (com.example.app.CustomizedListView, ArrayList>)

Tienes una pista de tu problema. IMHO tienes que cambiar la forma en que estás usando LazyAdapter. Te sugiero que: compruebe si mi código resolvió su problema con Fragment, luego haga otra pregunta con respecto a ArrayList / LazyAdapter.

Sí, use getActivity (). FindViewById (id), pero sólo si sabe que el fragmento está realmente conectado a una actividad. Si no es así, getActivity () devolverá null.

Una alternativa es llamar a findViewById en una vista que esté dentro del fragmento, por ejemplo, la vista que se devuelve en onCreateView.

Y mejor

 final View v = inflater.inflate(R.layout.your_layout_with_list, container, false); findViewById(id) 

Esta:

  getActivity().findViewById(id) 

actividad será nula antes de adjuntar a la actividad.

  • OnCreateView () en Fragment no se llama inmediatamente, incluso después de FragmentManager.executePendingTransactions ()
  • Android Refreshing Fragment View después de AsyncTask
  • Implementar onKeyPreIme (int keyCode, KeyEvent event) en Fragmento
  • Retire todos los fragmentos del contenedor
  • ¿Cómo iniciar la transición de elementos compartidos usando Fragmentos?
  • Android Fragment no respeta a match_parent como altura
  • Fragmentos anidados animados de Android
  • La carga de Google Maps es demasiado lenta en la aplicación de Android
  • fragmento de llamada dentro de la clase AppWidgetProvider
  • Reiniciar el fragmento dentro de la actividad
  • Fragmentos en viewpager, no se encontró error de vista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.