Estoy teniendo problemas para hacer clic en elementos de ListView en los fragmentos. Escribí el código de modo que los fragmentos punto a los archivos de distribución para todo y en el interior de la 2 de los diseños son ListViews, que recuperan sus entradas de elementos en una matriz de cadena en el strings.xml. Yo no podía encontrar una manera de implementar un setOnItemClickListener para cada elemento ListView en mi caso, debido a la forma en que escribí el código.

MainActivity.java

package com.example.test_app;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.view.Menu;

public class MainActivity extends FragmentActivity{
    ViewPager ViewPager = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewPager= (ViewPager) findViewById(R.id.pager);
        FragmentManager fragmentManager=getSupportFragmentManager();
        ViewPager.setAdapter(new AdapterActivity(fragmentManager));
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }
}

AdapterActivity.java

package com.example.test_app;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class AdapterActivity extends FragmentStatePagerAdapter{
public AdapterActivity(FragmentManager fm){
super(fm);
}
@Override
public Fragment getItem(int i){
Fragment fragment=null;
if(i==0){
fragment=new HomeFragment();
}
if(i==1){
fragment=new CommunityFragment();
}
if(i==2){
fragment=new ResourcesFragment();
}
return fragment;
}
@Override
public int getCount(){
return 3;
}
@Override
public CharSequence getPageTitle(int position){
if(position==0){
return "Home Page";
}
if(position==1){
return "Community";
}
if(position==2){
return "Resources";
}
return null;
}
}
class HomeFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
return inflater.inflate(R.layout.home_fragment, container, false);
}
}
class CommunityFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
return inflater.inflate(R.layout.community_fragment, container, false);
}
}
class ResourcesFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
return inflater.inflate(R.layout.resources_fragment, container, false);
}
}

A continuación, en el resources_fragment.xml diseño, hay un ListView

<ListView
android:id="@+id/resourcesListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/categories" >
</ListView>

Se agarra a las entradas de strings.xml

<string-array name="categories">
<item>Category 1</item>
<item>Category 2</item>
<item>Category 3</item>
<item>Category 4</item>
<item>Category 5</item>
<item>Category 6</item>
<item>Category 7</item>
<item>Category 8</item>
</string-array>

He utilizado en este enlace para crear mi ListView, pero la setOnItemClickListener no funciona para mí. ¿De qué otra forma puedo conectar cada elemento listview otras actividades?

OriginalEl autor apoorvkh | 2014-03-04

2 Comentarios

  1. 8

    El lugar para agregar tu ListView.SetOnItemClickListener es en el fragmento de código de creación, después de inlfate los diseños. El uso de findViewById para encontrar tu ListView, y añadir su setOnItemClick oyente.

    class ResourcesFragment extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    View view = inflater.inflate(R.layout.resources_fragment, container, false);
    ListView lv = (ListView) view.findViewById(R.id.mylistviewid);
    lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1,
    int position, long arg3) {
    //TODO Auto-generated method stub
    String category = categories[position];
    Class activityClass = lookupActivityClass_byName(category);
    //You could lookup by position, but "name" is more general
    Intent intent = new Intent(getActivity(), activityClass);
    startActivity(intent);
    }
    });
    return view;
    }
    Muchas gracias! Acabo de empezar el aprendizaje de desarrollo de android, así que esto es un poco difícil de entender. Sin embargo, no estoy muy seguro de cómo el contenido de onItemClick de trabajo. Quiero que cada elemento de la lista para iniciar una nueva actividad cuando se hace clic, así que voy a crear una clase para cada categoría, y cada clase va a comenzar una nueva actividad. Cómo iba yo a escribir el código dentro de onItemClick para cada elemento de la lista?
    El código que he añadido en el onItemClick proporciona un esquema de lo que usted necesita hacer.
    Creo que lo entiendo, se supone que tengo que agregar una Matriz de Cadena antes de Cadena de categoría = categorías[posición]? Ex: Cadena de categorías[] = {«Categoría 1», «Categoría 2», «Categoría 3», «Categoría 4», «Categoría 5», en la Categoría «6», «7», de la Categoría de «8»}; Pero lookupActivityClass_byName es todavía «no definido para el tipo de new AdapterView.OnItemClickListener(){}
    sí, la búsqueda es una función a implementar, toma un nombre, salidas de la coincidencia de activity.class. Puede implementar la búsqueda por posición demasiado si u creo que los números enteros son más fáciles (por ejemplo, usted puede cambiar() en un entero).
    Ok, así que sólo tienes que crear un método para ello y, básicamente, tienen que devolver una clase dependiendo del constructor?

    OriginalEl autor NameSpace

  2. 3

    Cuando se utiliza Fragment, usted puede encontrar puntos de vista dentro de onCreateView(). En término más simple, es lo mismo como de onCreate() de Activity.

    Por lo que en este caso, encontrar ListView dentro de onCreateView() y asignar onItemClickListener no sólo.

    OriginalEl autor Paresh Mayani

Dejar respuesta

Please enter your comment!
Please enter your name here