2012-11-21 11 views
6

Ich habe Anwendung für Android Tablet getan. In diesem muss ich zwei ListViews anzeigen. Eine für einfache Listenansicht und eine für benutzerdefinierte Listenansicht. Sobald ich auf eine einfache Listenansichtszeile klicke, müssen diese Details in einer anderen benutzerdefinierten Listenansicht angezeigt werden. Dafür wurde ich Fragment genommen, um beide Listenansichten auf einem einzigen Bildschirm anzuzeigen. Für Custom ListView wurde ich benutzerdefinierte Adapter genommen, um benutzerdefinierte Daten zu binden. Aber wenn ich auf eine einfache Listenansichtszeile klicke, zeigt die Anwendung keinen Antwortfehler an. Mein Code wäre so. Für mein Fragment enthält den Code wie dieseWie man benutzerdefinierte ListView in android Fragement einstellen?

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; 
    } 

}

Und Code meines benutzerdefinierten Adapter wie diese mich

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"); 
    } 
}; 

}

Bitte führen, was in obigem Code falsch läuft.

+0

Ich kann keine offensichtlichen Fehler in Ihrem Code finden, aber wenn Sie den Debugger in Eclipse und Schritt durch den Code nach dem Setzen eines Haltepunkts auf die Log.e() - Anweisung in der OnClickListener, vielleicht können Sie das Problem lokalisieren? – span

+0

Ich sehe, dass Sie drei verschiedene onClickListers hinzufügen. Wo sind sie, und warum willst du das tun? btnone.setOnClickListener (oneclick); btntwo.setOnClickListener (twoclick); btnthree.setOnClickListener (thrirdclick); – Noloxs

+0

Ja, wir können eine Aktionsmethode für die Verarbeitung mehrerer Schaltflächen verwenden. Aber in Bezug auf mein Problem ist es nicht das Problem. Ich nehme nur so. Aber ich implementiere die Funktionalität dafür nicht. – nari

Antwort

0

Ich wurde Fragment für die Anzeige beider Listenansichten in einem einzigen Bildschirm genommen. Mai das ist das Problem.ein Fragment für eine Listenansicht und zwei Fragmente in einer Aktivität anzuzeigen. Ich denke, das ist viel besser. Weil ich glaube nicht, dass Fragment geladen wird, um Multi-Layout (Listenansichten)

+0

Ja, ich habe ein Fragment für nur benutzerdefinierte Listenansicht genommen und einfache Listenansicht ist nicht im selben Fragment. – nari