Как получить ID/название обьекта в RecyclerView?
Мне нужно,чтобы при нажатии на обьект в RecyclerView(папка, которая ведет на новое активити),в верхнем ActionBar'e показывался тайтл с названием этой папки. Т.е если у меня есть Папка 1,Папка 2 и Папка 3,то при открытии Папки 2 у меня должно отображаться 2 и т.д. Я уже что только не пробовал, но всегда отображается либо название первой в списке папки, либо последней. Как дать системе понять, какую именно папку я открываю, чтобы потом найти имя папки в массиве?? Подойдет абсолютно любой способ, хоть уникальное ID TextView в шаблоне(folder_layout) для этой папки.
Для хранения имен папок я использую массив InputedLinks в классе приложения.
Код адаптера, для создания папок.
package com.example.test;
import android.app.AlertDialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private AlertDialog.Builder ADbuilder;
private AlertDialog LinkDelete;
private TextView hint;
private Button ok, cancel;
Context context;
int favicons[];
int position;
public RecyclerViewAdapter(Context cont, ArrayList<String> folders, int favics[]) {
context = cont;
MyApp.appInstance.Inputedlinks = folders;
favicons = favics;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.folder_layout, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
holder.links_res.setText(MyApp.appInstance.Inputedlinks.get(position));
holder.favicon.setImageResource(favicons[0]);
final String folders= MyApp.appInstance.Inputedlinks.get(position);
holder.foldercard.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
CreateHintWindow();
return true;
}
});
}
@Override
public int getItemCount() {
return MyApp.appInstance.Inputedlinks.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView links_res;
ImageView favicon;
CardView foldercard;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
links_res = itemView.findViewById(R.id.link_res);
favicon = itemView.findViewById(R.id.link_icon);
foldercard = itemView.findViewById(R.id.linkCard);
}
}
private void CreateHintWindow(){
ADbuilder = new AlertDialog.Builder(context);
LayoutInflater inflater = LayoutInflater.from(context);
final View WindowView = inflater.inflate(R.layout.delete_window, null);
hint = WindowView.findViewById(R.id.hint);
ok = WindowView.findViewById(R.id.okButton);
cancel = WindowView.findViewById(R.id.cancelButton);
final String folders = MyApp.appInstance.Inputedlinks.get(position);
ADbuilder.setView(WindowView);
LinkDelete = ADbuilder.create();
LinkDelete.show();
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
RemoveItem(folders);
LinkDelete.dismiss();
}
});
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LinkDelete.dismiss();
}
});
}
private void RemoveItem(String folders){
int position = MyApp.appInstance.Inputedlinks.indexOf(folders);
MyApp.appInstance.Inputedlinks.remove(position);
PreferencesConfig.ArrayPref(context, MyApp.appInstance.Inputedlinks);
notifyItemRemoved(position);
}
}
Код основного активити, из которого я открываю папки. В новое активити нужно передать FolderTitle.
package com.example.test;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.view.View;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ArrayList<String> links_list = new ArrayList<String>();
RecyclerView recyclerView;
RecyclerViewAdapter myAdapter;
int folder_icon[] = {};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
links_list = PreferencesConfig.ReadArrayPref(this);
if (links_list == null){
links_list = new ArrayList<>();
}
recyclerView = findViewById(R.id.foldersView);
RecyclerViewAdapter myAdapter = new RecyclerViewAdapter(this, links_list, folder_icon);
recyclerView.setAdapter(myAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
public void onClickOpenFolder(View view){
Intent intent = new Intent(this, FolderActivity.class);
intent.putExtra("title", MyApp.appInstance.FolderTitle);
startActivity(intent);
}
...