【问题标题】:How to add onclciklistner in recycler view with its position如何在回收站视图中添加 onclciklistner 及其位置
【发布时间】:2020-04-22 19:20:23
【问题描述】:

在回收站视图中从 firebase 数据库中检索数据,但现在我无法设置 onclicklistner 并转到其他活动并将值传递给其他活动。我已经尝试从适配器设置 onclcklistner,但它只是转到其他活动,我如何获取项目视图的位置并仅在新活动中发送它们的记录。

主要活动代码

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
FirebaseRecyclerAdapter<Category, CategoryViewHolder>adapter;
FirebaseDatabase database;
DatabaseReference reference;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_recycler_view);

    database = FirebaseDatabase.getInstance();
    reference=database.getReference("Category");
    recyclerView =(RecyclerView)findViewById(R.id.recyclerview);
    recyclerView.setHasFixedSize(true);
    layoutManager= new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);


    showlist();

}

private void showlist()
{
    FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<Category>()
            .setQuery(reference,Category.class).build();

    adapter= new FirebaseRecyclerAdapter<Category, CategoryViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull CategoryViewHolder categoryViewHolder, int i, @NonNull Category category) {
            categoryViewHolder.textusername.setText(category.getUserName());
            categoryViewHolder.textusesurname.setText(category.getUserSurname());
            categoryViewHolder.textusernumber.setText(category.getUserNumber());
        }

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



    adapter.startListening();
    adapter.notifyDataSetChanged();
    recyclerView.setAdapter(adapter);
}

}

Category.java 的代码

package com.example.fantasyguru.Model;

public class Category {
private String userName;
private String userNumber;
private String userSurname;

public Category() {
}

public Category(String userName, String userNumber, String userSurname) {
    this.userName = userName;
    this.userNumber = userNumber;
    this.userSurname = userSurname;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getUserNumber() {
    return userNumber;
}

public void setUserNumber(String userNumber) {
    this.userNumber = userNumber;
}

public String getUserSurname() {
    return userSurname;
}

public void setUserSurname(String userSurname) {
    this.userSurname = userSurname;
}
}

CategoryViewHolder 代码

import android.view.View;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.fantasyguru.R;

 public class CategoryViewHolder extends RecyclerView.ViewHolder{

public TextView textusername;
public TextView textusesurname;
public TextView textusernumber;



public CategoryViewHolder(@NonNull View itemView) {
    super(itemView);
    textusername=(TextView)itemView.findViewById(R.id.textView_username);
    textusesurname=(TextView)itemView.findViewById(R.id.textView_usersurname);
    textusernumber=(TextView)itemView.findViewById(R.id.textView_usernumber);

}



}

【问题讨论】:

    标签: android firebase


    【解决方案1】:

    onBindViewHolder 中执行此操作:

    adapter= new FirebaseRecyclerAdapter<Category, CategoryViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull CategoryViewHolder categoryViewHolder, int i, @NonNull Category category) {
            categoryViewHolder.textusername.setText(category.getUserName());
            categoryViewHolder.textusesurname.setText(category.getUserSurname());
            categoryViewHolder.textusernumber.setText(category.getUserNumber());
    
            //click item
            categoryViewHolder.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v){
    
                  Intent intent = new Intent(MainActivity.this , YourOtherActiviyName.class);
                  intent.putExtra("user_name" , category.getUserName());
                  intent.putExtra("user_sur_name" , category.getUserSurname());
                  intent.putExtra("user_number" , category.getUserNumber());
                  getApplicationContext().startActivity(intent);
                 }
    
    
            });
        }
    

    YourOtherActiviyName

    //in onCreate
    Intent intent = getIntent();
    //these are the passed values
    String userName = intent.getStringExtra("user_name");
    String userName = intent.getStringExtra("user_sur_name");
    String userName = intent.getStringExtra("user_number");
    

    更新:

    代替这一行:

    getApplicationContext().startActivity(intent);
    

    试试这个:

    MainActivity.this.startActivity(intent);
    

    【讨论】:

      猜你喜欢
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      相关资源
      最近更新 更多