Можно ли программно создавать интерактивные элементы из моего GridView? - PullRequest
0 голосов
/ 05 июня 2018

В моем приложении есть действие под названием tasti.class.Когда я нажимаю button «aggiungi tasti», он открывает AlertDialog, где я могу ввести имя.Затем, когда я нажимаю «Сохранить», он создает пользовательский CardView в моем GridView, который находится внутри моего ScrollView, как вы можете видеть на скриншоте ниже.

enter image description here

Теперь я хотел бы знать, возможно ли сделать любой из этих созданных CardViews кликабельным.Я хочу иметь возможность изменить, когда я нажму на один из них, Text внутри него.

Вот мой 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();

                }
            }
        });
    }
}

Есть ли у кого-нибудь какие-либо предложенияо том, как я могу это сделать?Есть ли способ сделать это без RecyclerView?

Ответы [ 2 ]

0 голосов
/ 07 июля 2018

Добавьте clickListener для родительского макета этого XML, который вы использовали в вашем 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>

Добавить слушателя в вашем onBindViewHolder как:

parentLayout.setOnClickListener({
})
0 голосов
/ 05 июня 2018

Вы можете попробовать:

cardView.setOnClickListener(v ->
{
    // update TextView text
});

Это работает, если вы не возражаете против использования оператора Lambda.Если вы попытаетесь использовать вышеизложенное, вы можете получить ошибку lambda expressions not supported at this language level, которую легко исправить, обновив «Совместимость с исходным кодом» и «Целевая совместимость» в Android Studio, как показано здесь .

.CardView с XML, вы можете получить его для программного использования, как это:

CardView cardView = (CardView) findViewById(R.id.yourCardViewId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...