Android открыть новое действие и передать значение из базы данных - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю над Android Программированием.

Теперь застрял при попытке установить onclick для моего класса myViewHolder. После отладки и проверки при нажатии всегда закрывайте приложение.

Вот myViewHolder класс:

class MyViewHolder extends RecyclerView.ViewHolder
{
    TextView movieName;
    ImageView movieImagePoster;
    TextView movieYear;
    RelativeLayout relativeLayout;

    public MyViewHolder(View itemView) {
        super(itemView);
        movieName = (TextView)itemView.findViewById(R.id.movieName);
        movieImagePoster = (ImageView)itemView.findViewById(R.id.movieImagePoster);
        movieYear = (TextView)itemView.findViewById(R.id.movieYear);
        relativeLayout = itemView.findViewById(R.id.relative);

        context = itemView.getContext();

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, movieDetails.class);
                context.startActivity(intent);
            }
        });
    }
}

Класс movieDetails

package com.example.netmov;

import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class movieDetails extends AppCompatActivity {

    private ImageView imageView;
    TextView textView;

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.movie_details);

        imageView = findViewById(R.id.detailsMovieImageCover);
        textView = findViewById(R.id.detailsMovieDescription);
    }
}

и movieDetails.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/constrainLayout">

<ImageView
    android:id="@+id/detailsMovieImageCover"
    android:layout_width="match_parent"
    android:layout_height="350dp"
    android:scaleType="centerCrop"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/ic_launcher_background" />

<TextView
    android:id="@+id/detailsMovieDescription"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/detailsMovieImageCover"
    android:layout_marginStart="16dp"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="22dp"
    android:layout_marginEnd="16dp"
    android:layout_marginRight="16dp"
    android:layout_marginBottom="143dp"
    android:text="TextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextView"
    android:textSize="18sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/detailsMovieImageCover" />
</androidx.constraintlayout.widget.ConstraintLayout>

Это MainActivity.java

public class MainActivity extends AppCompatActivity {
private RecyclerView MoviesRV;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    MoviesRV = findViewById(R.id.listMovieAction);

    ambil_data();
}

void ambil_data() {
    String link = "http://192.168.183.28/netmov/latest_update.php";
    StringRequest respon = new StringRequest(
            Request.Method.POST,
            link,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject jsonObject = new JSONObject(response);
                        JSONArray jsonArray = jsonObject.getJSONArray("hasil");
                        ArrayList<Get_data> list_data;
                        list_data = new ArrayList<>();
                        for(int i=0; i<jsonArray.length(); i++){
                            JSONObject hasil = jsonArray.getJSONObject(i);
                            String movieName = hasil.getString("movieName");
                            String movieNameShort = hasil.getString("movieNameShort");
                            String movieImagePoster = hasil.getString("movieImagePoster");
                            String movieYear = hasil.getString("movieYear");
                            list_data.add(new Get_data(
                                    movieName, movieNameShort, movieImagePoster, movieYear
                            ));
                        }

                        CustomAdapter adapter = new CustomAdapter(MainActivity.this, list_data);
                        MoviesRV.setAdapter(adapter);
                        MoviesRV.setLayoutManager(new LinearLayoutManager(MainActivity.this, LinearLayoutManager.HORIZONTAL, false));
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
                }
            }
    );

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(respon);
}
}

Мой вопрос:
1. Как go movieDetails.class по клику?
2. Как передать содержимое, например movieName, movieYear, в movieDetails.class?

1 Ответ

0 голосов
/ 20 апреля 2020

используйте контекст вашей MainActivity в вашем адаптере.

</p> <pre><code> Context mContext; CustomAdapter(Context context, ArrayList<Get_data> list_data){ this.mContext = context; }

Я предполагаю, что вашlativeLayout является идентификатором родительского макета вид. Поэтому напишите onClickListener для вашего относительного размера в методе OnBindViewHolder в вашем адаптере.

</p> <pre><code> holder.relativeLayoutsetOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, movieDetails.class); mContext.startActivity(intent); } });

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...