내 대답을 아래로 스크롤하십시오. 질문은별로 중요하지 않으며 코드는 혼란 스럽습니다.한 번에 여러 버튼 리스너를 추가 할 수 있습니까?
버튼 리스너를 쉽게 반복 할 수 있도록 ID 레이블을 가져올 수있는 기능이 있습니까?
public static final Map<String, Integer> RMAP = createMapR();
// Map of widget id's in R
private static Map<String, Integer> createMapR() {
Map<String, Integer> result = new HashMap<String, Integer>();
for (Field f : R.id.class.getDeclaredFields()) {
String key = f.getName();
Integer value = 0;
try {
value = f.getInt(f);
}
catch (IllegalArgumentException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
result.put(key, value);
}
return Collections.unmodifiableMap(result);
}
과 RMAP를 데리러, 내가 지정한 레이블이 교차한다 나의 조각의 다음 하나 현재 내가 파편이 코드의 라인을 주택 내 주요 "용기"XML에 있습니다. 몇 개의 버튼이있어서 거대한 청취자 목록을 지정하는 것이 비효율적 인 것처럼 보이기 때문에이 작업을 수행합니다. 그런 다음이 코드에서 벗어났습니다.
public class BottomFragment extends Fragment {
private final String[] LABELS = {"button_do_1", "button_woah_2", "button_foo_1",
"button_hi_2"};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.bottom_fragment, container, false);
for (String item : LABELS) {
if (Container.RMAP.containsKey(item)) {
((Button) v.findViewById(Container.RMAP.get(item)))
.setOnClickListener(this);
}
}
return v;
}
그러나이 안드로이드의 목록을 반복 할 수있는 방법 인 경우 : 심지어 코드의 첫 번째 블록을 필요로하지 않았을) 특히 BottomFragment (이드 항목과는 ID 년대의 수동 목록을 제거 할 것 내가 입력했습니다.
위의 코드는 작동합니다. 그러나 특정 조각에 대한 ID 목록을 가져올 수 있었다면 버튼 onClick 리스너를 setOnCLickListener (this)의 15 회선 대신 멋진 루프에 한꺼번에 추가 할 수있었습니다. 지금은 두 가지 목록을 사용하고 있습니다. 하나는 자동으로 채워지 며, 여기에는 모든 R.id() 변수가 포함됩니다. 제 경우에는 주로 버튼과 다른 위젯입니다. – Steven
해당 유형의 함수가 없거나 해당 뷰에 위젯 ID를 가져 오는 데 사용할 수있는 함수의 조합이 있으면 위의 코드가 작동합니다. 입력 한 레이블이있어 위 코드가 자동으로 작동하지 않습니다. 신분증은 수동으로 있어요. – Steven
이런 종류의 작업에는 SparseArray를 사용해야합니다. https://developer.android.com/reference/android/util/SparseArray.html – hwrdprkns