rya*_*dlf 1 android footer spinner
有没有办法在微调器下拉列表中添加页脚?例如,假设我正在从数据库中填充一个微调器,但我想在列表的底部进行选择,而不管我如何安排列表.该列表可能是"Database Item 1,2 ...,3 ...",并且在列表的底部是"Add Item to Database"的页脚选项.
到目前为止,我已经使用了您的CustomSpinner类,如下所示:
public class CustomSpinner extends Spinner implements OnItemClickListener {
private AlertDialog myDialog = null;
private OnClickListener myButtonClickListener = null;
private GrainSpinnerAdapter adapter = null;
public CustomSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setButtonClickListener(OnClickListener listener) {
myButtonClickListener = listener;
}
public void setAdapter(GrainSpinnerAdapter adapter){
this.adapter = adapter;
}
@Override
public boolean performClick() {
Context context = getContext();
//Inflate the layout
final LayoutInflater inflater = LayoutInflater.from(getContext());
final View v = inflater.inflate(R.layout.my_custom_spinner, null);
// set up list view
final ListView lv = (ListView) v.findViewById(R.id.list);
lv.setAdapter(adapter);
lv.setSelection(getSelectedItemPosition());
lv.setOnItemClickListener(this);
// set up button
final Button btn = (Button) v.findViewById(R.id.addButton);
btn.setOnClickListener(myButtonClickListener);
// build our dialog
AlertDialog.Builder builder = new AlertDialog.Builder(context);
// show prompt, just as our Spinner parent does
if (getPrompt() != null) {
builder.setTitle(getPrompt());
}
// create and show dialog
myDialog = builder.setView(v).create();
myDialog.show();
return true;
}
@Override
public void onItemClick(AdapterView<?> view, View itemView, int position, long id) {
setSelection(position);
if (myDialog != null) {
myDialog.dismiss();
myDialog = null;
}
}
Run Code Online (Sandbox Code Playgroud)
我想使用一个单独的适配器,如下所示:
public class GrainListAdapter extends SimpleCursorAdapter {
private static final String DEFAULT_UNITS = "American";
private Button upButton;
private Context myContext;
private RecipeGrainActivity parentActivity;
private Button downButton;
private String units;
private double getLbs;
public GrainListAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
myContext = context;
parentActivity = (RecipeGrainActivity) myContext;
//Checks for metric pref.
SharedPreferences myPrefs = PreferenceManager.getDefaultSharedPreferences(context);
units = String.valueOf(myPrefs.getString(context.getString(R.string.pref_measurement), DEFAULT_UNITS));
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
int idColumn = cursor.getColumnIndex("_id");
final int getId = cursor.getInt(idColumn);
final double increment = 0.25;
UnitsConversions convert = new UnitsConversions();
int nameColumn = cursor.getColumnIndex("name");
String getName = cursor.getString(nameColumn);
TextView name = (TextView)view.findViewById(R.id.GrainName);
name.setText(getName);
int originColumn = cursor.getColumnIndex("origin");
String getOrigin = cursor.getString(originColumn);
TextView origin = (TextView)view.findViewById(R.id.GrainOrigin);
origin.setText(getOrigin);
if(units.equals("Metric")){
//Sets labels to metric.
String kilos = context.getResources().getString (R.string.kilograms);
TextView weightLabel = (TextView)view.findViewById(R.id.GrainLbsLabel);
weightLabel.setText(kilos);
}
}
@Override
public View newView(Context context, Cursor cursor, final ViewGroup parent) {
View view = View.inflate(context, R.layout.grain_list_item, null);
return view;
}
Run Code Online (Sandbox Code Playgroud)
}
这允许我为微调器中的每个listitem构建一个自定义行.我想我可以使用我的活动中的customspinner.setadapter()将适配器设置为CustomSpinner.但是,CustomSpinner类中定义的ListView使用类中引用的适配器.如何将我的适配器传递给类,以便它可以使用它?
以下是我必须将自定义项添加到布局中的方法:
<com.bluelightuniverse.android.brewmobile.CustomSpinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/GrainNameSpinner"
android:layout_toRightOf="@id/GrainOriginSpinner"
android:layout_toLeftOf="@+id/AddGrainButton">
</com.bluelightuniverse.android.brewmobile.CustomSpinner>
Run Code Online (Sandbox Code Playgroud)
在你的CursorAdapter中,覆盖方法getCount()和getDropDownView:例如,如果你想在最后放一个按钮,你可以这样做:
new SimpleCursorAdapter(...) {
@Override
public int getCount() {
return super.getCount()+1;
}
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
View res=null;
if (position == getCount()-1) {
//better not try to reuse our view as it can be requested for the spinner or by the list with different kind of layouts.
View mButton= getActivity().getLayoutInflater().inflate(R.layout.create_activity_button, parent,false);
mButton.setOnClickListener(ObservationListFragment.this);
res= mButton;
} else if (convertView != null && android.R.id.button1 == convertView.getId() ){
// If the adapter is trying to recycle our footer view, we force the generation of a new view (check on the id of our custom view)
res= super.getDropDownView(position, null, parent);
} else {
res= super.getDropDownView(position, convertView, parent);
}
return res;
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2715 次 |
| 最近记录: |