简体   繁体   English

当我单击 RecyclerView 项目时,我希望 TextView 在同一活动中显示项目的标题

[英]When I click on RecyclerView Item I want the TextView in same activity to display Item's title

RecyclerView UI RecyclerView 界面

As you can see the TextView is on the top, that's where I want to display the title of selected RecyclerView item.如您所见,TextView 位于顶部,这就是我要显示所选 RecyclerView 项目标题的位置。 Most of the tutorials and blog teach to navigate to next activity when an item is clicked, but that isn't something I am looking for.大多数教程和博客都教在单击项目时导航到下一个活动,但这不是我想要的。

MainActivity.java MainActivity.java

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private List<Item> itemList;
    private ItemAdapter itemAdapter;
    private SearchView searchView;
    TextView itemname;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initialize(savedInstanceState);
        initializeLogic();
    }

    private void initialize(Bundle savedInstanceState) {
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        searchView = (SearchView) findViewById(R.id.searchView);
        searchView.clearFocus();

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                filterList(newText);
                return true;
            }
        });
    }

    private void filterList(String newText) {
        List<Item> filteredList = new ArrayList<>();
        for (Item item : itemList) {
            if (item.getItemName().toLowerCase().contains(newText.toLowerCase())){
                filteredList.add(item);
            }
        }

        if (filteredList.isEmpty()) {
            Toast.makeText(this, "No Match", Toast.LENGTH_SHORT).show();
        } else {
            itemAdapter.setFilteredList(filteredList);
        }
    }

    private void initializeLogic() {
        RecyclerView();
    }

    private void RecyclerView () {
        itemList = new ArrayList<>();
        //  Adding Data to Item List
        itemList.add(new Item("Black", R.drawable.android_black));
        itemList.add(new Item("Blue", R.drawable.android_blue));
        itemList.add(new Item("Green", R.drawable.android_green));
        itemList.add(new Item("Pink", R.drawable.android_pink));
        itemList.add(new Item("Red", R.drawable.android_red));
        itemList.add(new Item("Yellow", R.drawable.android_yellow));
        itemList.add(new Item("Black", R.drawable.android_black));
        itemList.add(new Item("Blue", R.drawable.android_blue));
        itemList.add(new Item("Green", R.drawable.android_green));
        itemList.add(new Item("Pink", R.drawable.android_pink));
        itemList.add(new Item("Red", R.drawable.android_red));
        itemList.add(new Item("Yellow", R.drawable.android_yellow));

        itemAdapter = new ItemAdapter(itemList);
        recyclerView.setAdapter(itemAdapter);
    }
}

Item.java Item.java

public class Item {
    private String itemName;
    private int itemImage;

    public Item(String itemName, int itemImage) {
        this.itemImage = itemImage;
        this.itemName = itemName;
    }

    public int getItemImage() {
        return itemImage;
    }

    public String getItemName() {
        return itemName;
    }

    public void setItemName(String itemName) {
        this.itemName = itemName;
    }
}

ItemAdapter.java项目适配器.java

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemViewHolder> {

    private List<Item> itemList;
    int row_index = -1;

    public ItemAdapter(List<Item> itemList) {
        this.itemList = itemList;
    }

    public void setFilteredList(List<Item> filteredList) {
        this.itemList = filteredList;
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.each_item, parent, false );
        return new ItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {

        Item item = itemList.get(position);
        holder.itemNameTv.setText(item.getItemName());
        holder.itemImageView.setImageResource(item.getItemImage());

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ////////////////////////////
                Toast.makeText(view.getContext(), "Item is clicked" + item.getItemName(), Toast.LENGTH_SHORT).show();
            }
        });

        holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                row_index = position;
                notifyDataSetChanged();
                Toast.makeText(v.getContext(), "Item is clicked " + item.getItemName(), Toast.LENGTH_SHORT).show();

            }
        });

        if (row_index == position) {
            holder.cardView.setBackgroundColor(Color.LTGRAY);
        } else {
            holder.cardView.setBackgroundColor(Color.WHITE);
        }
    }

    @Override
    public int getItemCount() {
        if (itemList == null) {
            return 0;
        } else {
            return itemList.size();
        }
    }

    public class ItemViewHolder extends RecyclerView.ViewHolder{
        public TextView itemNameTv;
        public ImageView itemImageView;
        public CardView cardView;

        public ItemViewHolder(@NonNull View itemView) {
            super(itemView);

            cardView = itemView.findViewById(R.id.eachCardView);
            itemNameTv =  itemView.findViewById(R.id.eachItemTextView);
            itemImageView = itemView.findViewById(R.id.eachItemImageView);
        }
    }

}

You can do it via Interface.你可以通过接口来做到这一点。

Step 1: Create a new interface class as a CustomClick步骤 1:创建一个新接口 class 作为CustomClick

public interface CustomClick{
    void onClick(String text);
}

Step 2: Declare it in your ItemAdapter .第 2 步:在您的ItemAdapter中声明它。

private List<Item> itemList;
private int row_index = -1;
// create variable
private CustomClick customClick;

// Create Constructor.
public ItemAdapter(List<Item> itemList, CustomClick customClick) {
    this.itemList = itemList;
    this.customClick = customClick;
}

Step 3: Add those lines in your adapter at click.第 3 步:单击时在适配器中添加这些行。

 holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           customClick.onClick(String.valueOf(item.getItemName()));
        }
    });

Step 4: Now in your MainActivity第 4 步:现在在您的MainActivity

 itemAdapter = new ItemAdapter(itemList, (text)->{
      // here you got text what you clicked in adapter...
      itemname.setText(text);
 });
 recyclerView.setAdapter(itemAdapter);

Add to your adapter class a variable TextView textView .将变量TextView textView

Change the constructor to将构造函数更改为

ItemAdapter(List<Item> itemList, TextView textView) {
    this.itemList = itemList;
    this.textView = textView;
}

Instantiate your adapter with实例化你的适配器

new ItemAdapter(list, myTextView);

In the onClick handler在 onClick 处理程序中

textView.setText(item.getItemName());

You could hide all kind of other elements like recyclerview, other components you do not want to and show data with your element.您可以隐藏所有类型的其他元素,例如 recyclerview、您不想隐藏的其他组件,并使用您的元素显示数据。 Why do you use activities instead of fragments?为什么你使用活动而不是片段?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 当我单击RecyclerView项时,我想获取ID - I want to get the id when I click a RecyclerView item 当我单击 recyclerView 中的项目时打开特定活动 - Open an specific activity when I click an item from an recyclerView 单击 RecyclerView 后,当我想在新活动中显示详细信息时出现错误。 使用 Firebase - Get error when I want to display detail in new activity after click on RecyclerView. Using Firebase 我想使用if语句单击导航抽屉上的项目时启动新的活动 - I want to launch new Activity when the Item on Navigation Drawer is click using if statement 当我在 RecyclerView 项目中单击时,片段加载数据错误数据 - Fragment loading data wrong data when I click in RecyclerView item 当我单击另一个recyclerview中的项目时如何显示回收者视图 - How to show recycler view when i click an item in another recyclerview 每当我想删除 RecyclerView 项目时出现 IndexOutOfBoundsException - IndexOutOfBoundsException whenever I want to delete an RecyclerView item 当我单击 listView 项目时,如何在另一个活动中显示来自 firestore 的详细信息? - How to display detail informations from firestore in another activity when I click a listView item? 当我单击列表中的每个项目时,我需要获取项目的内容(图像和文本) - I need when I click in every item in the list I want to get the content of item (IMAGE AND TEXT) Android studio:从数据库中删除项目时,如何更新回收站视图中的文本视图? - Android studio: How do I update a textview in a recyclerview when an item from the database is deleted?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM