знать, когда выбран checkedtextiew’s

#android #click

#Android #нажмите

Вопрос:

Я динамически создал checkedtextview всех установленных приложений. Я хотел бы знать, как узнать, когда пользователь нажимает на checkedtextview. Я искал и не могу его найти или не понял решение. Может кто-нибудь привести мне пример?

     ScrollView sv = new ScrollView(this);

    LinearLayout ll = new LinearLayout(this);
    ll.setOrientation(LinearLayout.VERTICAL);
    sv.addView(ll);

    final PackageManager pm = getPackageManager();

    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

    for (ApplicationInfo packageInfo : packages) {
            CheckedTextView ctv = new CheckedTextView(this);
            ctv.setText(packageInfo.packageName);
            ctv.setCheckMarkDrawable (android.R.drawable.checkbox_on_background);
            ctv.setHeight(80);
            ctv.setTextSize(35);
            ll.addView(ctv);
    }
    this.setContentView(sv);
  

Это делает то, что я делаю, но не похоже на правильный путь?

 for (ApplicationInfo packageInfo : packages) {
            CheckedTextView ctv = new CheckedTextView(this);
            ctv.setText(packageInfo.packageName);
            ctv.setCheckMarkDrawable (android.R.drawable.checkbox_on_background);
            ctv.setHeight(80);
            ctv.setTextSize(35);
            ctv.setOnTouchListener(new OnTouchListener(){
                @Override 
                public boolean onTouch(View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        // Toggle the checked state of the button 
                        CheckedTextView ctv = (CheckedTextView) v;
                        if (ctv.isSelected()) {
                            ctv.setSelected(false);
                            ctv.setCheckMarkDrawable(android.R.drawable.checkbox_off_background);

                        } else { 
                            ctv.setSelected(true);
                            ctv.setCheckMarkDrawable(android.R.drawable.checkbox_on_background);

                        } 
                    } 
                    return true; 
                } 
            });


            ll.addView(ctv);
    }
    this.setContentView(sv);
  

Комментарии:

1. Это Android? Если это так, вы должны пометить его.

Ответ №1:

Чтобы заметить, когда щелкает вид, вы должны использовать OnClickListener .

 ctv.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View view) {
        Toast.makeText(MyActivity.this, "Click!", Toast.LENGTH_SHORT).show();
    }

});
  

Комментарии:

1. Спасибо за помощь, будет ли это в цикле for. Я отредактировал свой вопрос выше, прежде чем увидел ваш ответ. похоже, это работает.

2. Это зависит. Вы можете включить ее в цикл, если хотите отдельный OnClickListener для каждой кнопки, или вы можете создать один OnClickListener вне цикла и добавить его внутри цикла. Если вы используете ее, вы можете использовать view.getId() для идентификации кнопки, которая нажата. Кроме того, чтобы очистить код, вы могли бы создать отдельный класс, который реализует OnClickListener .

3. Отлично, я пошел с отдельным классом. Спасибо