Id と Title を含むカスタム Spinner を作成しようとしています。このスピナーにはタイトルが表示されますが、コードのどこからでも選択した ID にアクセスできます。どうすればいいですか。C# の ComboBox のようなものです。ありがとう。
質問する
3178 次
3 に答える
1
解決しました!最初に、カスタムアダプタを作成しました。
public class SimpleCustomeAdapter extends ArrayAdapter<String>{
Context c;
List<String> id;
List<String> title;
public SimpleCustomeAdapter(Context context, int textViewResourceId,List<String> id, List<String> title) {
super(context, textViewResourceId,id);
c=context;
this.id=id;
this.title=title;
}
@Override
public View getDropDownView(int position, View convertView,ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
public View getCustomView(int position, View convertView, ViewGroup parent) {
this.setDropDownViewResource(R.layout.spinner_layout);
LayoutInflater inflater=LayoutInflater.from(c);
View row=inflater.inflate(R.layout.spinner_layout, parent, false);
TextView idTextView=(TextView)row.findViewById(R.id.idCustomspinnertextView);
idTextView.setText(id.get(position));
TextView titleTextView=(TextView)row.findViewById(R.id.titleCustomspinnertextView);
titleTextView.setText(title.get(position));
Typeface externalFont=Typeface.createFromAsset(c.getAssets(), "font/BKOODB.TTF");
titleTextView.setTypeface(externalFont);
titleTextView.setTextSize(25);
return row;
}
}
次に、カスタムスピナーを作成しました。
public class CustomSpinner extends Spinner {
public CustomSpinner(Context context, AttributeSet attrs, int defStyle,
int mode) {
super(context, attrs, defStyle, mode);
// TODO Auto-generated constructor stub
}
public CustomSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public CustomSpinner(Context context, int mode) {
super(context, mode);
// TODO Auto-generated constructor stub
}
List<String> idList;
List<String> titleList;
public void setAdapter(SimpleCustomeAdapter adapter) {
// TODO Auto-generated method stub
super.setAdapter(adapter);
this.idList= adapter.id;
this.titleList = adapter.title;
}
public void setSelectedId(long id){
for (int i = 0; i < idList.size(); i++) {
if(idList.get(i).contains(id+""))
{
this.setSelection(i);
break;
}
}
Log.d("SpinnerError", "This id is not in adapter!");
}
public CustomSpinner(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
}
今私の活動コードは次のようになっています:
public class MyActivity extends Activity {
CustomSpinner customspinner1;
Button button1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
customspinner1=(CustomSpinner)findViewById(R.id.customSpinner1);
button1=(Button) findViewById(R.id.button1);
List<String> payoffTypeList = new ArrayList<String>();
List<String> payoffTypeIdList = new ArrayList<String>();
DatabaseAccess dba = new DatabaseAccess(this);
Cursor cur = dba.getAllPayofftype();
if (cur.moveToFirst()) {
do {
payoffTypeList.add(cur.getString(1));
payoffTypeIdList.add(cur.getString(0));
} while (cur.moveToNext());
}
customspinner1.setAdapter(new SimpleCustomeAdapter(this, R.layout.spinner_layout,payoffTypeIdList, payoffTypeList));
///example
customspinner1.setSelectedId(12);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("myTag", "SlectedId = "+customspinner1.getSelectedId());
}
});
}
于 2013-01-19T07:18:10.187 に答える
1
次の例に従って、選択したスピナーの値を取得できます。
AdapterView.OnItemSelectedListener を実装するネストされたクラスを作成します。これにより、アイテムがスピナーから選択されたときにアプリケーションに通知するコールバック メソッドが提供されます。
そのクラスの「onItemSelected」メソッド内で、選択したアイテムを取得できます。
public class YourItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
String selected = parent.getItemAtPosition(pos).toString();
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}
最後に、ItemSelectedListener を Spinner に登録する必要があります。
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
編集:
A spinner does not support item click events. Calling this method will raise an exception.
于 2013-01-16T09:18:41.683 に答える
1
ID と名前が別々の配列にある場合、スピナーで選択されたアイテムの位置に基づいて、選択されたアイテム ID を取得できます。
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3)
{
System.out.println(Id_arr[spinner.getSelectedItemPosition()]);// for spinner id
System.out.println(spinner.getSelectedItem().toString());// for spinner item
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
于 2013-01-16T09:19:22.767 に答える