6 votes

Comment définir un ListView personnalisé dans Android Fragement ?

J'ai fait une application pour une tablette Android. Dans cette application, j'ai besoin d'afficher deux ListViews. Une pour la liste simple et une pour la liste personnalisée. Une fois que je clique sur une ligne de la liste simple, les détails doivent être affichés dans une autre liste personnalisée. Pour cela, j'ai pris un fragment pour afficher les deux listviews dans un seul écran. Pour le ListView personnalisé, j'ai pris l'adaptateur personnalisé pour lier les données personnalisées. Mais lorsque je frappe sur la ligne de la vue de liste simple, l'application montre une erreur de non-réponse. Mon code serait comme ceci. Pour mon fragment contient le code comme ceci

public class listDetails extends Fragment{

private int nAndroids;

public static ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
ListDetailsAdapter adapter;

static final String KEY_Title = "title";//"item";

public listDetails() {

}

  /**
    * Constructor for being created explicitly
    */
   public listDetails(int nAndroids) {
        this.nAndroids = nAndroids;
    }

   /**
     * If we are being created with saved state, restore our state
     */
    @Override
    public void onCreate(Bundle saved) {
        super.onCreate(saved);
        if (null != saved) {
            nAndroids = saved.getInt("nAndroids");
        }
    }

    /**
     * Save the number of Androids to be displayed
     */
    @Override
    public void onSaveInstanceState(Bundle toSave) {
        toSave.putInt("nAndroids", nAndroids);
    }

    /**
     * Make a grid and fill it with n Androids
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saved) {
        int n;
        Context c = getActivity().getApplicationContext();

        LinearLayout l = new LinearLayout(c);

        String listitems[]=new String[nAndroids];

        HashMap<String, String> map = new HashMap<String, String>();
        map.put(KEY_Title, "Question1");

        map = new HashMap<String, String>();
        map.put(KEY_Title, "Question2");

        map = new HashMap<String, String>();
        map.put(KEY_Title, "Question3");

        map = new HashMap<String, String>();
        map.put(KEY_Title, "Question4");
        menuItems.add(map);

        for (n = 0; n < nAndroids; n++) 
        {

            listitems[n] = "one"+n;
             ListView list = new ListView(c);

             adapter = new ListDetailsAdapter(this, menuItems);
             list.setAdapter(adapter);

        }
        return l;
    }

}

Et le code de mon adaptateur personnalisé est le suivant

public class ListDetailsAdapter extends BaseAdapter{

///private listDetails listactivity;
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;

public ListDetailsAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
    activity = a;
    data=d;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

public int getCount() {
    // TODO Auto-generated method stub
    return data.size();
}

public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
     View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.customlist, null);

            TextView title = (TextView)vi.findViewById(R.id.txtTitle);
            Button btnone = (Button)vi.findViewById(R.id.btnfirst);
            Button btntwo = (Button)vi.findViewById(R.id.btnsecond);
            Button btnthree = (Button)vi.findViewById(R.id.btnthird);
            Button btnfour = (Button)vi.findViewById(R.id.btnfourth);
            Button btnfive = (Button)vi.findViewById(R.id.btnfifth);

            btnone.setOnClickListener(oneclick);
            btntwo.setOnClickListener(twoclick);
            btnthree.setOnClickListener(thrirdclick); 
            HashMap<String, String> mymap = new HashMap<String, String>();
            mymap = data.get(position);
            title.setText(mymap.get(listDetails.KEY_Title));

    return vi;
}

private View.OnClickListener oneclick = new View.OnClickListener() {

    public void onClick(View v) {
        // TODO Auto-generated method stub
        Log.e("button clicked", "button one clicked");
    }
};

}

S'il vous plaît guidez-moi ce qui va mal dans le code ci-dessus.

0voto

xff1874 Points 86

On m'a pris un fragment pour afficher les deux listviews dans un seul écran. Mai c'est le problème.un fragment pour une vue de liste et afficher deux fragments dans une activité. Je pense que c'est beaucoup mieux. Parce que je ne pense pas que fragment est pris en charge pour charger multi mise en page (listviews)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X