如何在回收站视图中添加onclciklistner及其位置

时间:2020-04-22 19:20:23

标签: android firebase

在回收器视图中从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);

}



}

1 个答案:

答案 0 :(得分:0)

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);
相关问题