2010-06-08 14 views
6

मैं कुछ वस्तुओं को विस्तारणीय और कुछ आइटमों के साथ एक सूची लिखने की कोशिश कर रहा हूं। मैं यह चाहता हूं कि जब कोई भी आइटम या विस्तार योग्य सूची बच्चे पर क्लिक किया जाए, तो मैं आइटम के पाठ के आधार पर एक इरादा कह सकता हूं।मैं केवल कुछ निश्चित वस्तुओं के साथ एक सूची कैसे बना सकता हूं?

मुझे लगता है कि विस्तार योग्य सूचियां काम करेगी, लेकिन क्या विस्तारणीय सूची में आइटम सेट करने का कोई तरीका है ताकि उनके पास विस्तार योग्य सूची आइकन न हो? क्या मुझे स्ट्रिंग सरणी के अलावा कुछ और उपयोग करना चाहिए?

ऐसा करने का सबसे अच्छा तरीका क्या है?

धन्यवाद

नीचे, "क्षेत्र 3" आइटम "अटलांटा" और "बोस्टन" के बीच या एक सबसेट के रूप में मेरे अधूरा कोड, मैं आइटम "जोन 1", "जोन 2" डालने के लिए चाहते हैं अटलांटा के:

package test.lists.special; 

import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class SpecialList extends ListActivity{ 
TextView toptext; 
String[] items={"Atlanta", "Boston", "Chicago", "Dallas"}; 

@Override 

public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 
    setListAdapter(new ArrayAdapter<String>(this, 
    android.R.layout.simple_list_item_1, 
    items)); 
    toptext=(TextView)findViewById(R.id.toptext); 
} 

public void onListItemClick(ListView parent, View v, int position, 
long id) { 
    Intent intent = new Intent(); 

    if (parent.getItemAtPosition(position)=="Atlanta") 
    { 
      //THIS IS WHERE I WISH TO INSERT "ZONE 1", "ZONE 2", "ZONE 3" 
        //between Atlanta and Boston in the list 
    } 
    else if (parent.getItemAtPosition(position)=="Boston") 
    { 
      intent.setClass(this, test.lists.special.Boston.class); 
      startActivity(intent); 
    } 
    else if (parent.getItemAtPosition(position)=="Chicago") 
    { 
      intent.setClass(this, test.lists.special.Chicago.class); 
       startActivity(intent); 
    } 
    else if (parent.getItemAtPosition(position)=="Dallas") 
    { 
      intent.setClass(this, test.lists.special.Dallas.class); 
      startActivity(intent); 
    } 
    else if (parent.getItemAtPosition(position)=="Zone 1") 
    { 
      intent.setClass(this, test.lists.special.Atlanta.Zone1.class); 
      startActivity(intent); 
    } 
    else if (parent.getItemAtPosition(position)=="Zone 2") 
    { 
      intent.setClass(this, test.lists.special.Atlanta.Zone2.class); 
      startActivity(intent); 
    } 
    else if (parent.getItemAtPosition(position)=="Zone 3") 
    { 
      intent.setClass(this, test.lists.special.Atlanta.Zone3.class); 
      startActivity(intent); 
    } 
    } 

} 

उत्तर

0

मैं आपकी समस्या को समझ लिया है, तो आइटम, पंक्ति में एक अलग तत्व है कि आइटम के प्रकार के आधार पर की एक सूची क्या कर आप चाहते है।

मैं आपको क्या सलाह दूंगा कि बेस बेस एडाप्टर को विस्तारित करें और अपनी खुद की पंक्ति बनाएं। इस तरह आप नियंत्रित करते हैं कि वर्तमान पंक्ति को प्रकार के आधार पर मुद्रित किया जाएगा, जो कुछ भी दिखा रहा है या छुपा रहा है।

आधिकारिक एंड्रॉइड प्रलेखन में, अनुभाग API डेमो - ImageSwitcher आपको एक उदाहरण मिलेगा। नीचे

5

कार्य और परीक्षण कोड:

import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class SpecialList extends ListActivity{ 

    TextView toptext; 
    String[] items={"Atlanta", "Boston", "Chicago", "Dallas"}; 
    private CityListAdapter mListOfCities; 

    boolean mAtlantaListExpanded; 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 

     mAtlantaListExpanded = false; 
     mListOfCities = new CityListAdapter(); 
     setListAdapter(mListOfCities); 

     for (int n=0; n < items.length; n++) 
     { 
      mListOfCities.add(items[n]); 
     } 
    } 

    public void onListItemClick(ListView parent, View v, int position, long id) 
    { 
     Intent intent = new Intent(); 

     if (parent.getItemAtPosition(position)=="Atlanta") 
     { 
      mAtlantaListExpanded = !mAtlantaListExpanded; 
      mListOfCities.clear(); 
      for (int n=0; n < items.length; n++) 
      { 
       mListOfCities.add(items[n]); 
      }   
      Log.i("SpecialList", "Atlanta");    
     } 
     else if (parent.getItemAtPosition(position)=="Boston") 
     { 
      Log.i("SpecialList", "Boston"); 
     } 
     else if (parent.getItemAtPosition(position)=="Chicago") 
     { 
      Log.i("SpecialList", "Chicago"); 
     } 
     else if (parent.getItemAtPosition(position)=="Dallas") 
     { 
      Log.i("SpecialList", "Dallas"); 
     } 
    } 

    class CityListAdapter extends ArrayAdapter<String> {  

     CityListAdapter() {   
      super(SpecialList.this, R.layout.one_city_row); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      View row = null; 
      LayoutInflater inflater = getLayoutInflater(); 

      if ((position == 0) && (!mAtlantaListExpanded)) 
      { 
       row = inflater.inflate(R.layout.expandable_city_row, parent, false); 
       TextView city = (TextView) row.findViewById(R.id.Expandable_TextView01); 
       city.setText(items[position]); 

       TextView cityZone1 = (TextView) row.findViewById(R.id.Zone_TextView01); 
       cityZone1.setText("Zone 1"); 

       TextView cityZone2 = (TextView) row.findViewById(R.id.Zone_TextView02); 
       cityZone2.setText("Zone 2"); 

       TextView cityZone3 = (TextView) row.findViewById(R.id.Zone_TextView03); 
       cityZone3.setText("Zone 3"); 

       cityZone1.setOnClickListener(
        new Button.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          Log.i("SpecialList", "Zone 1"); 
         } 
        } 
       ); 

       cityZone2.setOnClickListener(
        new Button.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          Log.i("SpecialList", "Zone 2"); 
         } 
        } 
       ); 

       cityZone3.setOnClickListener(
        new Button.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          Log.i("SpecialList", "Zone 3"); 
         } 
        } 
       );    
      } 
      else 
      { 
       row = inflater.inflate(R.layout.one_city_row, parent, false); 
       TextView city = (TextView) row.findViewById(R.id.City_TextView01); 
       city.setText(items[position]); 
      }     

      return(row); 
     } 
    } 
} 

पर "अटलांटा" कारण क्लिक करें सूची का पुनः बनाने, केवल "अटलांटा" दिखा या विस्तृत सूची के बीच टॉगल। R.layout.one_city_row.xml एक टेक्स्ट व्यू के साथ सरल लेआउट है, R.layout.Expandable_city_row.xml में टेक्स्टव्यू तत्वों के रूप में अतिरिक्त सबप्शन हैं, जैसा कि संलग्न कोड स्निपेट से निष्कर्ष निकाला जा सकता है।

इस दृष्टिकोण का उपयोग करके आप अपनी आवश्यकताओं के अनुसार पूरी तरह से सूची अनुकूलित कर सकते हैं। उन स्थानों पर जहां मैंने Log.i() डाला, आपको अपना इरादा रखना चाहिए।

संबंधित मुद्दे

 संबंधित मुद्दे