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.

  • MapView inside Fragmento - el niño especificado ya tiene un padre
  • FragmentStatePagerAdapter IllegalStateException: <MyFragment> no está actualmente en el FragmentManager
  • Reemplazar un fragmento / ficha en un Viewpager
  • Android - FragmentTabHost me da "No se conoce ninguna pestaña para la etiqueta null"
  • Utilizar la misma clase de Fragmento dos veces en diferentes contenedores
  • Android ListView en el ejemplo de fragmento
  • FindViewById devuelve NULL cuando se utiliza Fragment
  • Cómo encontrar listview en 'fragmento'
  • Fragmento con RecyclerView: java.lang.IllegalArgumentException: Las vistas desechadas o adjuntas no se pueden reciclar. IsScrap: false isAttached: true
  • Métodos de fragmento: attach (), detach (), remove (), replace (), popBackStack ()
  • Botón Haga clic dentro del fragmento para abrir un nuevo fragmento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.