앱의 간단한 설정 페이지를 만들려고합니다.Spinner를 ListView에 동적으로 추가했을 때 Spinner에서 선택한 항목에 어떻게 액세스합니까?
XML 파일에서 레이아웃을 정의한 객체 목록을 만들고 싶습니다.
이러한 개체의 레이아웃에는 제목 TextView, 도움말 TextView 및 회 전자가 있습니다.
코드에서 이러한 개체를 동적으로 추가 할 때 선택한 값을 얻을 수 있도록 이러한 개별 Spinner보기를 어떻게 참조합니까?
나는 현재 설정 개체 (목록이 채워집니다 무엇을)이:
public class Setting {
private String name;
private String description;
private String[] values;
public Setting(String name, String description, String[] values) {
this.name = name;
this.description = description;
this.values = values;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public String[] getValues() {
return values;
}
}
사용자 정의 ArrayAdapter와는 뷰 개체를 설정 번역 :
을 (R.layout.spinner_row_text_layout.xml입니다 단지 텍스트보기 ... 스피너의 항목의 레이아웃)
public class SettingsAdapter extends ArrayAdapter<Setting> {
public SettingsAdapter(Context context, ArrayList<Setting> settings) {
super(context, 0, settings);
}
@Override
// Takes the position in the array, the view to convert, and the parent of the view as parameters
public View getView(int position, View convertView, ViewGroup parent) {
// Get the item in this position
Setting setting = getItem(position);
// Check if a view is being reused, otherwise inflate the view (look at view recycling in lists)
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.settings_row_view, parent, false);
}
// findViewById in the given view to convert
TextView title = (TextView) convertView.findViewById(R.id.titleText);
TextView help = (TextView) convertView.findViewById(R.id.helpText);
Spinner spinner = (Spinner) convertView.findViewById(R.id.spinner);
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(getContext(), R.layout.spinner_row_text_layout, setting.getValues());
spinner.setAdapter(spinnerAdapter);
title.setText(setting.getName());
help.setText(setting.getDescription());
return convertView;
}
}
그리고 다음 레이아웃 파일을 정의
설정 페이지 레이아웃 : 각 ListView에 항목에 대한
이<RelativeLayout
android:id="@+id/relativeLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.cgillions.counter.SettingsActivity">
<ListView
android:id="@+id/settingsList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:choiceMode="singleChoice"
android:divider="@color/black"
android:dividerHeight="5dp"/>
</RelativeLayout>
레이아웃 :
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
android:id="@+id/titleText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello"
android:textSize="20sp"
android:textColor="@color/black"
android:gravity="center_vertical"/>
<TextView
android:id="@+id/helpText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/animation_settings_hint"
android:textSize="12sp"
/>
</LinearLayout>
<Spinner
android:id="@+id/spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.5"/>
</LinearLayout>
나는 설정 페이지 레이아웃에 해당하는 활동을 시작할 때, 나는 다음과 같은 오류 얻을 :
을 junit.framework.Assert.assertNotNull (Assert.java:211)
at com.example.cgillions.counter.SettingsActivity.
이@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
setTitle("Settings");
// Create a new Setting object in order to populate list
animSetting = new Setting("Animation", getResources().getString(R.string.animation_settings_hint), getResources().getStringArray(R.array.anim_values));
settings = new ArrayList<>();
settings.add(animSetting);
ListView settingsList = (ListView) findViewById(R.id.settingsList);
assertNotNull(settingsList);
settingsList.setAdapter(new SettingsAdapter(this, settings));
animSpinner = (Spinner) settingsList.findViewById(R.id.spinner);
assertNotNull(animSpinner);
}
오류가 발생에서 onCreate android.app.Activity.performCreate (Activity.java:5990)에서 (SettingsActivity.java:46)
는
이 내에서 onCreate() 메소드입니다 마지막 줄 - 예. ID '회 전자'가있는보기를 찾을 수 없으므로 null입니다. Spinner에 잘못 액세스하고 있습니다. 어떻게해야하는지 조언 할 수 있습니까?
선택한 항목을 가져 오기 위해 Spinner 개체를 가져 오려고합니다.
R.idspinner는 목록보기 내부의 레이아웃이 아니지만 내부보기의 레이아웃이며 모든 행에는 Spinner의 새 인스턴스가 있습니다. 왜 활동에 스피너가 필요합니까? (어떤 행? 첫 행의 행? 두 번째 행?) – CLucera
'내부 뷰의 레이아웃입니까?'라는 것은 무엇을 의미합니까? 새 인스턴스가있는 각 행에 대해 말하는 것을 알고 있습니다. 각 개별 목록 항목에 어떻게 액세스합니까? 이 경우 첫 번째 항목의 회 전자가 필요합니다 (목록에 하나의 설정 만있는 경우 ...) – Charlie
나는 선택한 항목을 가져 와서 다른 활동에 대한 동작을 변경할 수 있도록 활동의 회 전자를 원했습니다. – Charlie