Привет, я создаю приложение, в котором MainActivity отображает GridView некоторых категорий. Когда щелкают по каждой категории, открывается другое действие (GridItemActivity) с некоторым RecyclerView. Также при нажатии RecyclerView открывается приложение GalleryActivity, чтобы показать содержимое (ImageView и TextView) для выбранного списка. В файле манифеста я установил родителей каждого занятия, как показано ниже:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gridrecycler">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".GalleryActivity">
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value=".GridItemActivity"/>
</activity>
<activity android:name=".GridItemActivity" >
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Проблема:
Когда я нажимаю на значок «Назад» на панели ActionBar GalleryActivity, GridActivity отображается ожидаемым образом, но затем без содержимого (мои элементы RecyclerView не отображаются). Также название ActionBar меняется на Имя приложения.
На адаптере утилизатора, каков наилучший способ настройки прослушивателя onClick. Должно ли оно быть в методе onBindViewHolder или в классе ViewHolder, или где это должно быть. Если это в классе ViewHolder, то, пожалуйста, покажите мне, как реализовать это в моем коде, потому что я что-то упустил.
GridItemActivity.java
package com.example.gridrecycler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import java.util.ArrayList;
public class GridItemActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private ArrayList<String> mNames = new ArrayList<>();
private int[] images = {
R.drawable.apples,R.drawable.bakes,R.drawable.banana,R.drawable.craves,
R.drawable.grapes,R.drawable.orange,R.drawable.pineapple,R.drawable.redgrapes,
R.drawable.strawberrys,R.drawable.watermelons
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid_item);
//enable back Button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Log.d(TAG, "onCreate: started");
Log.d(TAG, "getIncomingItent: checking for incoming intents");
if (getIntent().hasExtra("name")){
Log.d(TAG, "getIncomingItent: found intent extra");
String categoryName = getIntent().getStringExtra("name");
setActionBarTitle(categoryName);
initImageBitmaps();
}
}
private void setActionBarTitle(String title)
{
getSupportActionBar().setTitle(title);
}
private void initImageBitmaps(){
Log.d(TAG, "initImageBitmaps: preparing bitmaps");
mNames.add("Apple");
mNames.add("Bakes");
mNames.add("Banana");
mNames.add("Craves");
mNames.add("Grapes");
mNames.add("Oranges");
mNames.add("Pineapple");
mNames.add("Pepper");
mNames.add("Strawberry");
mNames.add("Watermelon");
initRecyclerView();
}
private void initRecyclerView(){
Log.d(TAG, "initRecyclerView: init recyclerview");
RecyclerView recyclerView = findViewById(R.id.recycler_view);
RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, mNames, images);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
}
RecyclerViewAdapter.java
package com.example.gridrecycler;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private static final String TAG = "RecyclerViewAdapter";
private ArrayList<String> mImageNames = new ArrayList<>();
private int[] mImages;
private Context mContext;
public RecyclerViewAdapter(Context mContext, ArrayList<String> mImageNames, int[] mImages) {
this.mImageNames = mImageNames;
this.mImages = mImages;
this.mContext = mContext;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_listitem, viewGroup, false);
ViewHolder holder = new ViewHolder(view, mContext, mImages, mImageNames);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
Log.d(TAG, "onBindViewHolder: called");
viewHolder.image.setImageResource(mImages[i]);
viewHolder.imageName.setText(mImageNames.get(i));
viewHolder.parentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick: clicked on : "+mImageNames.get(i));
Toast.makeText(mContext, mImageNames.get(i), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(mContext, GalleryActivity.class);
intent.putExtra("image_url", mImages[i]);
intent.putExtra("image_name", mImageNames.get(i));
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mImageNames.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView image;
TextView imageName;
RelativeLayout parentLayout;
int[] images;
ArrayList<String> mImageNames = new ArrayList<>();
Context context;
public ViewHolder(@NonNull View itemView, Context context, int[] images, ArrayList<String> mImageNames) {
super(itemView);
image = itemView.findViewById(R.id.image);
imageName = itemView.findViewById(R.id.image_name);
parentLayout = itemView.findViewById(R.id.parent_layout);
itemView.setOnClickListener(this);
this.context = context;
this.images = images;
}
@Override
public void onClick(View v) {
//Intent intent = new Intent(mContext, GalleryActivity.class);
//intent.putExtra("image_url", mImages[getAdapterPosition()]);
//intent.putExtra("image_name", mImageNames.get(getAdapterPosition()));
//mContext.startActivity(intent);
}
}
}
GalleryActivity.java
package com.example.gridrecycler;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;
public class GalleryActivity extends AppCompatActivity {
private static final String TAG = "GalleryActivity";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
Log.d(TAG, "onCreate: started");
getIncomingIntent();
}
private void getIncomingIntent()
{
Log.d(TAG, "getIncomingItent: checking for incoming intents");
if (getIntent().hasExtra("image_url") && getIntent().hasExtra("image_name")){
Log.d(TAG, "getIncomingItent: found intent extra");
int imageUrl = getIntent().getIntExtra("image_url", 000);
String imageName = getIntent().getStringExtra("image_name");
getSupportActionBar().setTitle(imageName);
setImage(imageUrl, imageName);
}
}
private void setImage(int imageUrl, String imageName){
Log.d(TAG, "setImage: setting image url and name to widgets");
TextView name = findViewById(R.id.image_description);
name.setText(imageName);
ImageView image = findViewById(R.id.image);
image.setImageResource(imageUrl);
}
}
Извините, что задали слишком много вопросов. Заранее спасибо.