有什么方法可以在回圈中初始化按鈕嗎?
我試過`public class MainActivity extends AppCompatActivity {
// CLICK SOUND //
private MediaPlayer clickSound;
// BUTTONS //
private Button btnAC;
private Button btnMasMenos;
private List<Button> listaBotones;
private List<String> listaIDs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
clickSound = MediaPlayer.create(this,R.raw.click);
// INITIALIZE BUTTONS //
listaBotones = Arrays.asList(btnAC,btnMasMenos);
listaIDs = Arrays.asList("R.id.btnAC","R.id.btnMasMenos");
for(Button b: listaBotones){
int id = 0;
b = findViewById(listaIDs.get(id));
id ;
}
}
這是錯誤:
原因:String 與 int 不兼容
我知道 R.id.button 它是一個整數,而不是一個字串......所以我想知道如何在回圈中自動初始化它們。
提前謝謝
uj5u.com熱心網友回復:
如果你想繼續你正在做的事情,那么使用一個整數而不是字串的串列,并將 ids 放入其中。
但是如果你這樣做的原因是你不想使用findViewById()很多,那么有解決方案,比如視圖系結,它非常簡單
閱讀更多資訊:https : //developer.android.com/topic/libraries/view-binding
uj5u.com熱心網友回復:
您不應該使用findViewById,獲取每個視圖是一個乏味的程序。相反,您應該使用viewBindingwhich 將為您的 XML 生成一個系結類,它將包含對所有視圖的直接參考。
要使用viewBinding,請在您的模塊中啟用它build.gradle
android {
...
buildFeatures {
viewBinding true
}
}
同步您的 Gradle 構建,它將為每個視圖生成系結類。
在您的活動中
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//access views using binding
binding.btnAc.setOnClickListener {}
}
在片段中使用
private var _binding: FragmentBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null // setting it null, otherwise it would lead to memory leak
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/334588.html
