Android 我可以通过编程方式从GridView中创建可单击的项目吗?

Android 我可以通过编程方式从GridView中创建可单击的项目吗?,android,android-studio,Android,Android Studio,在我的应用程序中,我有一个名为tasti.class的活动。当我按下按钮“aggiungi tasti”时,它会打开一个警报对话框,在那里我可以输入一个名称。然后,当我按save时,它将在我的GridView中创建一个自定义CardView,该视图位于我的ScrollView中,如下图所示 现在,我想知道的是,是否有可能使这些创建的cardwiews可点击。我希望能够在单击其中一个按钮时更改其中的文本 这是我的tasti.class代码: public class tasti extends

在我的应用程序中,我有一个名为
tasti.class
的活动。当我按下
按钮
“aggiungi tasti”时,它会打开一个
警报对话框
,在那里我可以输入一个名称。然后,当我按save时,它将在我的
GridView
中创建一个自定义
CardView
,该视图位于我的
ScrollView
中,如下图所示

现在,我想知道的是,是否有可能使这些创建的
cardwiews
可点击。我希望能够在单击其中一个按钮时更改其中的
文本

这是我的
tasti.class
代码:

public class tasti extends AppCompatActivity {

    RelativeLayout rellay_LOAD;
    GridLayout gridLayout;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tasti);

        rellay_LOAD = findViewById(R.id.rellay_LOAD);
        gridLayout = findViewById(R.id.gridLayout);

        rellay_LOAD.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                CustomAllert();

            }
        });
    }


    public void addLayout(String textViewText){
        View card = LayoutInflater.from(this).inflate(R.layout.cardview, gridLayout, false);

        TextView textView = card.findViewById(R.id.btnName);

        textView.setText(textViewText);

        gridLayout.addView(card);
    }


    public void CustomAllert(){
        AlertDialog.Builder mBuilder = new AlertDialog.Builder(tasti.this);

        @SuppressLint("InflateParams") View mView = getLayoutInflater().inflate(R.layout.custom_dialog, null);

        final EditText bottone = mView.findViewById(R.id.etBottone);

        final EditText prezzo = mView.findViewById(R.id.etPrezzo);

        Button mLogin = mView.findViewById(R.id.btnADD);

        mBuilder.setView(mView);

        final AlertDialog dialog = mBuilder.create();

        dialog.show();

        mLogin.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                if (!bottone.getText().toString().isEmpty() && !prezzo.getText().toString().isEmpty()) {

                    Toast.makeText(tasti.this,
                            "Tasto aggiunto con successo", Toast.LENGTH_SHORT).show();

                    addLayout(bottone.getText().toString());

                    dialog.dismiss();

                } else {

                    Toast.makeText(tasti.this,

                            "Non lasciare dei campi vuoti!", Toast.LENGTH_SHORT).show();

                }
            }
        });
    }
}
有人对我如何做到这一点有什么建议吗?是否有一种方法可以在不使用回收视图的情况下完成此操作?

您可以尝试:

cardView.setOnClickListener(v ->
{
    // update TextView text
});
如果您不介意使用Lambda语句,那么这是可行的。如果您尝试使用上述方法,则可能会出现此语言级别不支持的
lambda表达式
错误,如图所示,可以通过更新Android Studio的源代码兼容性和目标兼容性轻松修复该错误

由于您使用XML创建了
CardView
,因此可以将其用于如下编程用途:

CardView cardView = (CardView) findViewById(R.id.yourCardViewId);

为该XML的父布局添加一个
clickListener
,该布局已在
onCreateViewHolder
RecyclerView
中使用

例如,如果您的
RecyclerView
项目如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/ll_parent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
// Your View Elements
</LinearLayout>

使用gridLayout.setOnItemClickListener(新的OnItemClickListener(){@Override public void onItemClick(AdapterView父对象,视图v,int位置,长id){Toast.makeText(tasti.this,“+position,Toast.LENGTH_SHORT).show();});无法解析方法setOnItemClickListener你把它放在哪里我把它放在OnCreate下实际上cardView是一个xml布局文件,而不是我的主布局中的cardView这会起作用吗?@I.Mytyuk好吧,你可以试试看它是否有效,如果你愿意的话。这只是我发现的一种不使用RecyclerView就可以点击CardView的方法,尽管基于此,最推荐使用RecyclerView。
parentLayout.setOnClickListener({
})