8

मैं एंड्रॉइड एक्शनबार स्पिनर को Google Currents एप्लिकेशन की तरह कुछ अनुकूलित करने की कोशिश कर रहा हूं। असल में, केवल 'उपशीर्षक' को स्पिनर से चुनना चाहिए, जबकि 'शीर्षक' वही रहता है। मैं समझता हूं कि एक कस्टम स्पिनर को बनाने की जरूरत है और मुझे getView() और getDropDownView() विधि को ओवरराइड करना होगा। लेकिन मैं इन विधियों को सही तरीके से ओवरराइड करने के तरीके पर यहां बहुत उलझन में हूं। क्या कुछ मुझे सही दिशा में घुमा सकते हैं। मुझे आशा है कि मैंने अपना प्रश्न स्पष्ट कर दिया है।एक्शनबार स्पिनर अनुकूलन

the image screenshot http://androidcowboy.com/wp-content/uploads/2012/12/google-currents-3a.jpg

नीचे दिए गए मेरे कोड है।

public class CustomSpinnerAdapter extends BaseAdapter { 

private LayoutInflater inflater; 

private final Context context; 
private final String[] dropDown; 
private final String mainText; 
private final String subText; 

public CustomSpinnerAdapter(Context context, 
     String mainText, String subText,String[] dropDown) { 

    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    this.mainText=mainText; 
    this.subText=subText; 
    this.context = context; 
    this.dropDown=dropDown; 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return 0; 
} 

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

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




@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    View actionBarView = inflater.inflate(R.layout.custom_spinner, null); 
    TextView textView = (TextView) actionBarView 
      .findViewById(R.id.custom_spinner_textview); 
    textView.setText(mainText); 
    return actionBarView; 
} 

@Override 
public View getDropDownView(int position, View convertView, ViewGroup parent) { 

    View dropDownView = inflater.inflate(R.layout.custom_spinner, null); 
    TextView dropDownTextView = (TextView) dropDownView 
      .findViewById(R.id.custom_spinner_dropdown_textview); 

    dropDownTextView.setText(dropDown[position]); 
    return dropDownView; 

} 
} 

उत्तर

17

मैंने इसे हल किया। मेरी एडाप्टर वर्ग के

लिस्टिंग:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 

<TextView 
    android:id="@+id/ab_basemaps_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" 
    android:textSize="20sp" 
    android:textColor="@color/White" /> 

<TextView 
    android:id="@+id/ab_basemaps_subtitle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/ab_basemaps_title" 
    android:text="TextView" 
    android:textColor="@color/White" 
    android:textSize="13sp" /> 

</RelativeLayout> 

ab_dropdown_view.xml की लिस्टिंग:

public class AdapterBaseMaps extends BaseAdapter { 

Context context; 
int layoutResourceId; 
ArrayList<ObjectLayers> data; 
LayoutInflater inflater; 

public AdapterBaseMaps(Context context, int textViewResourceId, 
     ArrayList<ObjectLayers> data) { 
    // super(a, textViewResourceId, data); 
    this.data = data; 
    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    this.context = context; 
    this.layoutResourceId = textViewResourceId; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View actionBarView = inflater.inflate(R.layout.ab_main_view, null); 
    TextView title = (TextView) actionBarView 
      .findViewById(R.id.ab_basemaps_title); 
    TextView subtitle = (TextView) actionBarView 
      .findViewById(R.id.ab_basemaps_subtitle); 
    title.setText(context.getResources() 
      .getString(R.string.label_cartravel)); 
    subtitle.setText(data.get(position).getLayerName()); 
    return actionBarView; 

} 

@Override 
public View getDropDownView(int position, View convertView, ViewGroup parent) { 
    View actionBarDropDownView = inflater.inflate(
      R.layout.ab_dropdown_view, null); 
    TextView dropDownTitle = (TextView) actionBarDropDownView 
      .findViewById(R.id.ab_basemaps_dropdown_title); 

    dropDownTitle.setText(data.get(position).getLayerName()); 

    return actionBarDropDownView; 

} 

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

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

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

} 

ab_main_view.xml की लिस्टिंग

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 

<TextView 
    android:id="@+id/ab_basemaps_dropdown_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:textSize="20sp" 
    android:padding="5dp" 
    android:textColor="@color/White" /> 

</RelativeLayout> 
+0

क्या Objectlayers है? – ajay

2

पहले उत्तर उपयोगी है, लेकिन एडाप्टर सबक्लास अनावश्यक है।

@ user1624587 के जवाब के रूप में एक्सएमएल परिभाषित करें तो बस public boolean onCreateOptionsMenu(Menu menu) में इसे संदर्भ:

ArrayAdapter<CharSequence> someAdapter = new 
     ArrayAdapter<CharSequence>(context, R.layout.ab_main_view, 
     android.R.id.text1, getResources().getStringArray(R.array.some_array)); 


    someAdapter.setDropDownViewResource(R.layout.ab_dropdown); 

    MenuItem item = menu.add("SomeTitle").setActionView(R.layout.some_spinner); 
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); //or whatever 

    someSpinner = (someSpinner) item.getActionView(); 
    someSpinner.setAdapter(someAdapter); 
    ...etc 
संबंधित मुद्दे