Java Android OnClickListener在片段中不工作
我有一个片段,显示了我从firebase中提取的用户详细信息。我正在尝试设置一个OnClickListener,以便登录的用户可以更改其图像,但我似乎无法使其正常工作。我已经查看了日志,没有发现任何错误。我看到其他人也在做类似的事情,似乎无法找到我的为什么不起作用 编辑:我发现了问题,但现在有一个不同的问题,当片段第一次加载时,Onlick不工作,直到我刷新片段,然后Onclick工作,但我不知道为什么片段需要刷新Onclick才能工作? 碎片Java Android OnClickListener在片段中不工作,java,android,android-fragments,onclicklistener,Java,Android,Android Fragments,Onclicklistener,我有一个片段,显示了我从firebase中提取的用户详细信息。我正在尝试设置一个OnClickListener,以便登录的用户可以更改其图像,但我似乎无法使其正常工作。我已经查看了日志,没有发现任何错误。我看到其他人也在做类似的事情,似乎无法找到我的为什么不起作用 编辑:我发现了问题,但现在有一个不同的问题,当片段第一次加载时,Onlick不工作,直到我刷新片段,然后Onclick工作,但我不知道为什么片段需要刷新Onclick才能工作? 碎片 ImageView adminImage;
ImageView adminImage;
adminImage = v.findViewById(R.id.AdminProfilePicture);
adminImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity(),"Long hold to change image",Toast.LENGTH_SHORT).show();
}
});
adminImage.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
Intent openGallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(openGallery,1000);
return false;
}
});
设置片段的主要活动
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_Account_admin:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ProfileAdminFragment()).commit();
break;
case R.id.nav_Games:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new GamesAdminFragment()).commit();
break;
case R.id.nav_Users:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new AllUsersAdminFragment()).commit();
break;
case R.id.nav_Fixture:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new FixturesAdminFragment()).commit();
break;
case R.id.nav_News:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new NewsAdminFragment()).commit();
break;
case R.id.nav_Contact:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ContactAdminFragment()).commit();
break;
default:
}
draw.closeDrawer(GravityCompat.START);
return true;
}
});
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, draw, toolbar,
R.string.nav_app_bar_open_drawer_description, R.string.navigation_drawer_close);
draw.addDrawerListener(toggle);
toggle.syncState();
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ProfileFragment()).commit();
navigationView.setCheckedItem(R.id.nav_Account);
}
}
XML
完整片段代码
public class ProfileAdminFragment extends Fragment {
FirebaseAuth fAuth;
FirebaseFirestore fStore;
TextView uName, uEmail, uPhone;
FusedLocationProviderClient fusedLocationProviderClient;
TextView userlocation;
ImageView adminImage;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_profile_admin, container, false);
fAuth = FirebaseAuth.getInstance();
fStore = FirebaseFirestore.getInstance();
userlocation = v.findViewById(R.id.tv_location);
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getContext());
if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
// getLocation();
} else {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 44);
}
uName = v.findViewById(R.id.profileFullName);
uEmail = v.findViewById(R.id.profileEmail);
uPhone = v.findViewById(R.id.profilePhone);
DocumentReference docR = fStore.collection("Users").document(fAuth.getCurrentUser().getUid());
docR.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
if (documentSnapshot.exists()) {
uName.setText(documentSnapshot.getString("FullName"));
uEmail.setText(documentSnapshot.getString("UserEmail"));
uPhone.setText(documentSnapshot.getString("PhoneNumber"));
}
}
});
getLocation();
// profile image
adminImage = v.findViewById(R.id.AdminProfilePicture);
adminImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity(), "Long hold to change image", Toast.LENGTH_SHORT).show();
}
});
adminImage.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
Intent openGallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(openGallery, 1000);
return false;
}
});
return v;
}
公共类ProfileAdminFragment扩展了片段{
弗斯;
FirebaseFirestore商店;
text查看uName、uEmail、uPhone;
FusedLocationProviderClient FusedLocationProviderClient;
TextView用户位置;
图像视图管理图像;
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图v=充气机。充气(R.layout.fragment\u profile\u admin,container,false);
fAuth=FirebaseAuth.getInstance();
fStore=FirebaseFirestore.getInstance();
userlocation=v.findviewbyd(R.id.tv\u位置);
fusedLocationProviderClient=LocationServices.getFusedLocationProviderClient(getContext());
if(ActivityCompat.checkSelfPermission(getContext()、Manifest.permission.ACCESS\u FINE\u LOCATION)==PackageManager.permission\u已授予){
//getLocation();
}否则{
ActivityCompat.requestPermissions(getActivity(),新字符串[]{Manifest.permission.ACCESS\u FINE\u LOCATION},44);
}
uName=v.findviewbyd(R.id.profileFullName);
uEmail=v.findViewById(R.id.profileEmail);
uPhone=v.findviewbyd(R.id.profilePhone);
DocumentReference docR=fStore.collection(“用户”).document(fAuth.getCurrentUser().getUid());
docR.get().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公共无效(文档快照文档快照){
if(documentSnapshot.exists()){
uName.setText(documentSnapshot.getString(“全名”);
uEmail.setText(documentSnapshot.getString(“UserEmail”);
setText(documentSnapshot.getString(“电话号码”));
}
}
});
getLocation();
//轮廓图像
adminImage=v.findViewById(R.id.AdminProfilePicture);
adminImage.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Toast.makeText(getActivity(),“长时间保持以更改图像”,Toast.LENGTH_SHORT.show();
}
});
adminImage.setOnLongClickListener(新视图.OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图){
Intent openGallery=newintent(Intent.ACTION\u PICK,MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI);
startActivityForResult(开放画廊,1000);
返回false;
}
});
返回v;
}
请尝试在ImageView中添加android:clickable=“true”
<RelativeLayout
android:id="@+id/rellay1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/grad"
android:paddingBottom="20dp">
<RelativeLayout
android:id="@+id/imageViewMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:background="@drawable/circle_border">
<ImageView
android:id="@+id/AdminProfilePicture"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_margin="9dp"
android:adjustViewBounds="true"
android:background="@drawable/circle"
android:padding="3dp"
android:scaleType="centerInside"
android:src="@drawable/ic_user"
android:clickable="true" />
</RelativeLayout>
例如,如果调用活动a中的片段, 然后: 将片段中的v初始化为公共静态 在您的活动中:
YourFragment.v.findViewById("AdminProfilePicture").setOnClickListener (...);
如果问题已解决,请回复
所以我发现我加载的是我的用户配置文件,而不是我的管理员配置文件,所以加载片段时存在冲突,所以为了使Onclick正常工作,我必须手动刷新片段
由此
new ProfileFragment()).commit();
对此,
new ProfileAdminFragment()).commit();
发布完整代码,此图像完整帮助您的长时间单击是否有效?不,两个OnClickListener都不工作。您可以粘贴片段的代码、膨胀视图的部分,并在此处设置片段的Listeneded完整代码吗
new ProfileAdminFragment()).commit();
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ProfileAdminFragment()).commit();
navigationView.setCheckedItem(R.id.nav_Account_admin);
}