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({
})