[英]TextView click listener not being called
我正在尝试使 android 应用程序上的 TextView 可点击,但未调用侦听器。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_oggi"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/fragment_oggi_title_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:paddingTop="20dp"
android:text="Oggi"
android:textStyle="bold"
android:textSize="25sp" />
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="@drawable/list_divider"
android:dividerHeight="21dp"
android:paddingTop="80dp"
android:paddingRight="5dp"
android:clickable="false"/>
</RelativeLayout>
那是片段,我正在尝试使“fragment_oggi_title_textview”可点击。
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_oggi, container, false);
view.post(() -> {
TextView textView = (TextView) MainActivity.getInstance().findViewById(R.id.fragment_oggi_title_textview);
textView.setClickable(true);
textView.setFocusable(true);
formattedDate = format.format(calendar.getTime());
textView.setText(String.format("Oggi (%s)", formattedDate));
DatePickerDialog.OnDateSetListener dateListener = (view1, year, monthOfYear, dayOfMonth) -> {
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, monthOfYear);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.detach(this);
fragmentTransaction.attach(this);
fragmentTransaction.commit();
System.out.println("CLICK1!");
};
textView.setOnClickListener((View.OnClickListener) v -> {
new DatePickerDialog(MainActivity.getInstance(), dateListener, calendar
.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH)).show();
System.out.println("CLICK!");
});
});
return view;
}
那是我的片段 class。 我正在设置 TextView 可点击和聚焦。 可悲的是,当我从模拟器和实际电话中单击 TextView 时,不会调用侦听器。 唯一一次调用它是当我用键盘 select 它并用回车键按下它时。 有谁知道我可能做错了什么?
编辑:TextVuew 被列表视图覆盖,这就是我无法单击它的原因。
如果 TextView 在Activity中,您可以在 Activity 中创建一个 getter 来获取 TextView,如下所示:
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
rest of your code
*/
textView = findViewById(R.id.textView);
}
public TextView getTextView() {
return textView;
}
}
在 onCreateView() 的 Fragment 中:
TextView textView = ((YourActivity)requireActivity()).getTextView();
如果您的 TextView 在片段中,请使用
TextView textView = (TextView) view.findViewById(R.id.fragment_oggi_title_textview);
更新
您的 TextView 没有收到点击事件的原因是因为它被您的布局中的 ListView 覆盖,您需要检查您的布局
保持简单并像这样:
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_oggi, container, false);
TextView textView =findViewById(R.id.fragment_oggi_title_textview);
formattedDate = format.format(calendar.getTime());
textView.setText(String.format("Oggi (%s)", formattedDate));
DatePickerDialog.OnDateSetListener dateListener = (view1, year, monthOfYear, dayOfMonth) -> {
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, monthOfYear);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.detach(this);
fragmentTransaction.attach(this);
fragmentTransaction.commit();
System.out.println("CLICK1!");
};
textView.setOnClickListener( v -> {
new DatePickerDialog(MainActivity.getInstance(), dateListener, calendar
.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH)).show();
System.out.println("CLICK!");
});
return view;
}
首先是你不需要view.post()
因为Fragment
有它自己的方法OnViewCreated
,它在创建View
后返回View
。 其次,您可以使用返回的view
找到您的TextView
。 因此,像这样重新格式化fragment
中的代码:
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_oggi, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
TextView textView = view.findViewById(R.id.fragment_oggi_title_textview);
formattedDate = format.format(calendar.getTime());
textView.setText(String.format("Oggi (%s)", formattedDate));
DatePickerDialog.OnDateSetListener dateListener = (view1, year, monthOfYear, dayOfMonth) -> {
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, monthOfYear);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.detach(this);
fragmentTransaction.attach(this);
fragmentTransaction.commit();
System.out.println("CLICK1!");
};
textView.setOnClickListener( v -> {
new DatePickerDialog(MainActivity.getInstance(), dateListener, calendar
.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH)).show();
System.out.println("CLICK!");
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.