㈠ android spinner 下拉列表
你想做个spinner用来选择国家,国家名旁边显示国旗?
我做过一个类似的功能,截取一段代码给你参考一下。
你要自定义一个Adapter。
package xxxx.widget;
import java.util.List;
import java.util.Map;
import xxxx.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
public class CountryAdapter extends BaseAdapter {
private int mResource = 0;
private int mFieldId = 0;
private boolean mNotifyOnChange = true;
private Context mContext = null;
private List<? extends Map<String, Object>> mList = null;
private LayoutInflater mInflater = null;
public CountryAdapter(Context context, List<? extends Map<String, Object>> list, int resource, int resourceId) {
mContext = context;
mList = list;
mResource = resource;
mFieldId = resourceId;
mInflater = LayoutInflater.from(mContext);
}
public CountryAdapter(Context context, List<? extends Map<String, Object>> list, int resource) {
mContext = context;
mList = list;
mResource = resource;
mInflater = LayoutInflater.from(mContext);
}
public void setList(List<? extends Map<String, Object>> list) {
mList = list;
if (mNotifyOnChange) notifyDataSetChanged();
}
@Override
public int getCount() {
return mList == null ? 0 : mList.size();
}
@Override
public Map<String, Object> getItem(int position) {
return mList == null ? null : mList.get(position);
}
@Override
public long getItemId(int position) {
return mList == null ? -1 : position;
}
public int getPosition(String code) {
for (int i = 0; i < mList.size(); i++) {
Map<String, Object>map = mList.get(i);
if (code.equals(map.get(StringUtil.KEY_CODE).toString())) {
return i;
}
}
return -1;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (mList == null) return null;
Map<String, Object> map = mList.get(position);
View view;
ImageTextView imageTextView;
ImageView voiceView;
ImageView speechView;
if (convertView == null) {
view = mInflater.inflate(mResource, parent, false);
} else {
view = convertView;
}
try {
if (mFieldId == 0) {
imageTextView = (ImageTextView) view;
} else {
imageTextView = (ImageTextView) view.findViewById(mFieldId);
}
} catch (ClassCastException e) {
throw new IllegalStateException(
"CountryAdapter requires the resource ID to be a CheckedImageTextView", e);
}
imageTextView.setKey(map.get(StringUtil.KEY_CODE).toString());
imageTextView.setImageResource(Integer.parseInt(map.get(StringUtil.KEY_FLAG).toString()));
imageTextView.setText(map.get(StringUtil.KEY_NAME).toString());
try {
voiceView = (ImageView) view.findViewById(R.id.voice);
if (voiceView != null) {
if (Boolean.parseBoolean(map.get(StringUtil.KEY_VOICE).toString()))
voiceView.setVisibility(View.VISIBLE);
else
voiceView.setVisibility(View.GONE);
}
speechView = (ImageView) view.findViewById(R.id.speech);
if (speechView != null) {
if (Boolean.parseBoolean(map.get(StringUtil.KEY_SPEECH).toString()))
speechView.setVisibility(View.VISIBLE);
else
speechView.setVisibility(View.GONE);
}
} catch (ClassCastException ignore) {
//
}
return view;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
mNotifyOnChange = true;
}
public void setNotifyOnChange(boolean notifyOnChange) {
mNotifyOnChange = notifyOnChange;
}
@Override
protected void finalize() throws Throwable {
mList.clear();
super.finalize();
}
}
然后在窗体Activity的onCreate里这样调用。创建一个HashMap的ArrayList,每个HashMap存储一个选项的内容:国家名,国旗还有一个code。用这个ArrayList作为参数创建一个刚才自定义的Adapter的实例。再把这个Adapter传给spinner。
ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(StringUtil.KEY_CODE, "CN");
map.put(StringUtil.KEY_NAME, "China");
map.put(StringUtil.KEY_FLAG, "@drawable/cn_flag");
list.add(map);
CountryAdapter adapter = new CountryAdapter(this,list,R.layout.country_singlechoice,R.id.checked1);
spnCountry = (Spinner)findViewById(R.id.spn_Country);
if (spnCountry != null) {
spnCountry.(false);
spnCountry.setDrawingCacheEnabled(false);
spnCountry.setAdapter(adapter);
spnCountry.setSelection(adapter.getPosition("CN"));
spnCountry.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Map<String, ?> map = adapter.getItem(position);
// do something
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// do nothing
}
});
}
资源文件R.layout.country_singlechoice:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<jp.co.efficient.mTranslate.widget.ImageTextView
android:id="@+id/checked1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textAppearance="?android:attr/textAppearanceSmallInverse"
android:gravity="center_vertical"
android:singleLine="true"
android:paddingLeft="6dip"
android:paddingRight="6dip"
android:ellipsize="marquee"
style="?android:attr/spinnerItemStyle" />
<ImageView
android:id="@+id/voice"
android:src="@drawable/mic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="6dip" />
<ImageView
android:id="@+id/speech"
android:src="@drawable/speak"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="6dip" />
</LinearLayout>
因为不方便给你源代码,所以截取了一部分,还作了一些修改,所以恐怕会出错。你按照这个思路修改一下。
㈡ 安卓开发,logcat报错,大牛来帮忙看看啊!!~!~!~
你给一个spinner设置了一个 onclick的监听器 不能这么用,把那个去掉就好了。
㈢ android spinner的用法请教
可以用ArrayAdapter实现。
给你你个思路吧:
List<ShangPin> spList=new ArrayList<ShangPin>(); //商品类中有两个属性 :物品的名称,物 品的url;
List<String> data=new ArrayList<String>(); //这个List用来装 物品的名称
for (int i = 0; i < spList.size(); i++) {
data.add(spList.get(i).getSpName()); //getSpName() 物品的名称的get方法
}
sp.setAdapter(new ArrayAdapter<String>(RegisterActivity.this, android.R.layout.simple_spinner_item, data)); //设置Adapter
//设置监听事件
sp_sheng.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent,
View view, int position, long id) {
TextView tv=(TextView) view; //这里的view是TextView类型的 , 自己可以打出来看看
for (int i = 0; i < spList.size(); i++) { //循环商品类的List
if(spList.get(i).getSpName().equals(tv.getText())){ //判断选中项在List中对应的商品类
String uri= result.get(i).getUri(); //这样就可以拿到Uri了
}
。。。。。。 拿到了Uri那就做自己想做的事去吧
㈣ android 的spinner是一个什么作用的控件
可以使用Button加ListPopupWindow实现和spinner一样的效果,并且可以监听到点击事件(Spinner是不能设置点击事件的)
布局文件,只有一个button
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent" >
<Button
android:id="@+id/button"
android:layout_width="100dp"
android:layout_height="50dp"
/>
</LinearLayout>
代码
public class MainActivity extends Activity {
private Button button;
private ListPopupWindow popupWindow;
private List<String> strings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
strings = new ArrayList<String>();
strings.add("item1");
strings.add("item2");
strings.add("item3");
button = (Button)findViewById(R.id.button);
popupWindow = new ListPopupWindow(this);
popupWindow.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,strings));
popupWindow.setAnchorView(button);
popupWindow.setWidth(LayoutParams.WRAP_CONTENT);
popupWindow.setHeight(LayoutParams.WRAP_CONTENT);
popupWindow.setModal(true);
popupWindow.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
button.setText(strings.get(position));
popupWindow.dismiss();
}
});
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
popupWindow.show();
}
});
}
}
㈤ android spinner怎么用
android中的spinner控件是表示下拉菜单的意思,按照如下步骤使用:
1、首先使用Android studio创建一个项目,如下图:
4、最后去类中绑定控件,并添加数据即可使用。
㈥ Android 开发 Spinner变化的问题 具体看补充。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.select_dialog_item, arrList);
sp.setAdapter(adapter);
使用上面的方法显示列表,你将“打游戏”添加到arrList数组中再刷新就可以了。。。
你现在是将Spinner中数据写在arrays.xml中了吧、、、
㈦ android中spinner的选中用什么方法
1,获取选中值要通过spinner的setOnItemSelectedListener()事件来操作,根据spinner绑定值的方式的不一样,获取选中值的方式略有不同。
2,如果没有用实体层绑定数据的话,诸如通过
SimpleAdapter adapter = new SimpleAdapter(
HRInputBase_Activity.this, items, R.layout.sp_item,
new String[] { "text", "value" }, new int[] {
R.id.sp_text, R.id.sp_value });
sp_privince.setAdapter(adapter);
这种方式绑定的。获取的方式为:
TextView ProvinceTxt = (TextView) sp_privince.getSelectedView()
.findViewById(R.id.sp_value); // 得到选中的选项Id
String codeString = ProvinceTxt.getText().toString();
如果使用的是实体层的话,在setOnItemSelectedListener()事件中根据点击的索引值获取相对应的实体类,然后从实体类中获取对应得Code和Value值,相对来说,使用实体层更加的方便,代码整洁。
3,两者都使用的是Adapter数据集的绑定,主要是考察对adapter的知识,可以对这方面多学习一点。
㈧ 关于android开发spinner显示的问题
spinner显示项的数据可以是String[],也可以是arrayList。你要做的就是数据项最开始里加上一列,spinner会默认选中第一项。。。或者使用spinner.setSelection(XXX)为他设置选中项。。。
㈨ android中spinner问题
你可以不满足条件的时候spinner .setClickable(false);设置点击无效。
满足条件设置为ture
㈩ android开发中怎样获取spinner选中的内容
1、获取选中值要通过spinner的setOnItemSelectedListener()事件来操作,根据spinner绑定值的方式的不一样,获取选中值的方式略有不同。
2、如果没有用实体层绑定数据的话,诸如通过
SimpleAdapter adapter = new SimpleAdapter(
HRInputBase_Activity.this, items, R.layout.sp_item,
new String[] { "text", "value" }, new int[] {
R.id.sp_text, R.id.sp_value });
sp_privince.setAdapter(adapter);
这种方式绑定的。获取的方式为:
TextView ProvinceTxt = (TextView) sp_privince.getSelectedView()
.findViewById(R.id.sp_value); // 得到选中的选项Id
String codeString = ProvinceTxt.getText().toString();
如果使用的是实体层的话,在setOnItemSelectedListener()事件中根据点击的索引值获取相对应的实体类,然后从实体类中获取对应得Code和Value值,相对来说,使用实体层更加的方便,代码整洁。
3、两者都使用的是Adapter数据集的绑定,主要是考察对adapter的知识,可以对这方面多学习一点。