2012-11-21 8 views
6

Zrobiłem aplikację dla tabletu z Androidem. W tym, muszę wyświetlić dwa ListViews. Jeden dla prostego widoku listy i jeden dla niestandardowego widoku listy. Po kliknięciu prostego wiersza listview, szczegóły te muszą zostać przedstawione w innym niestandardowym widoku listy. W tym celu wzięto fragment do wyświetlania obu odsłon na jednym ekranie. W przypadku niestandardowego ListView został mi przydzielony niestandardowy adapter do wiązania niestandardowych danych. Ale kiedy uderzyłem w prosty wiersz widoku listy, aplikacja pokazuje brak odpowiedzi na błąd. Mój kod byłby taki. Dla mojego fragmentu zawiera kod podobny do tegoJak ustawić niestandardowy ListView w Android Fragement?

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

}

i mój kod niestandardowy adaptera jak ten

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

}

proszę kierować do mnie, co się dzieje nie tak w powyższym kodzie.

+0

Nie mogę znaleźć żadnych oczywistych błędów w kodzie, ale jeśli korzystasz z debuggera w środowisku Eclipse i wykonujesz krok po ustawieniu punktu przerwania na instrukcja Log.e() w onClickListener, być może możesz wskazać problem? – span

+0

Widzę, że dodajesz trzy różne onClickListners. Gdzie oni są i dlaczego chcesz to zrobić? btnone.setOnClickListener (oneclick); btntwo.setOnClickListener (twoclick); btnthree.setOnClickListener (thrirdclick); – Noloxs

+0

Tak, możemy przyjąć jedną metodę działania dla obsługi wielu akcji przycisków. Ale w odniesieniu do mojego problemu to nie jest problem. Po prostu biorę to w ten sposób. Ale nie wdrażam funkcjonalności do tego. – nari

Odpowiedz

0

Zostałem pobrane fragmenty do wyświetlania obu widoków listy na jednym ekranie. Może to problem.jeden fragment dla jednego widoku listy i wyświetlaj dwa fragmenty w jednym działaniu. Myślę, że to znacznie lepiej. Ponieważ nie sądzę, że ten fragment jest obsługiwany w celu załadowania układu wielodzielkowego (widoki listy)

+0

Tak, wziąłem jeden fragment tylko dla niestandardowego widoku listy, a prosty widok listy nie ma tego samego fragmentu. – nari