Android 无法使onClick在片段中工作
说到碎片,我是个初学者。我已经浏览了几乎所有关于在片段中使用onClick的Stackoverflow问题/anwser,但是由于某种原因,我的onClick根本没有被触发 我有一个Android 无法使onClick在片段中工作,android,android-fragments,android-preferences,Android,Android Fragments,Android Preferences,说到碎片,我是个初学者。我已经浏览了几乎所有关于在片段中使用onClick的Stackoverflow问题/anwser,但是由于某种原因,我的onClick根本没有被触发 我有一个管理员活动,它加载一个设置片段,该片段扩展了首选片段 AdminActivity.java @覆盖 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.admin); g
管理员活动
,它加载一个设置片段
,该片段扩展了首选片段
AdminActivity.java
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.admin);
getFragmentManager().beginTransaction()
.replace(R.id.settings\u片段,新设置片段())
.commit();
}
admin.xml
设置片段
以编程方式加载首选项XML布局,其中一个布局包含一个首选项屏幕
,该屏幕具有一个首选项
,布局设置为另一个片段:
现在加载一个新的PreferenceFragment
,它允许更新应用程序(这是一个ITN分发的应用程序,不会上载到Play Store)
公共类SettingsUpdateFragment扩展片段实现View.OnClickListener
私有文本视图更新状态;
私有进程栏更新进程;
私有按钮更新;
私有文本视图最新更新;
在onCreateView
中,我定义了布局中变量的视图,并使用OnClickListener设置了按钮
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.settings\u update\u片段,容器,false);
updateStatus=(TextView)view.findViewById(R.id.updateStatus);
updateProgress=(ProgressBar)view.findViewById(R.id.updateProgress);
updateAction=(按钮)view.findViewById(R.id.updateAction);
lastUpdated=(TextView)view.findViewById(R.id.lastUpdated);
Iconnify.addIcons(updateAction);
setOnClickListener(这个);
返回视图;
}
onClick
取自视图。OnClickListener
实现setingsupdatefragment
@覆盖
公共void onClick(视图){
如果(更新){
d(标记“updateAction TriggeredforDownloadAndInstall()”;
下载并安装();
}否则{
Log.d(标记“为checkForUpdates()触发的updateAction”);
checkForUpdates();
}
}
由于某种原因,onClick从未被触发hasUpdates
默认为false
,因此至少应触发checkForUpdates()
方法
我还尝试为内联按钮创建视图.OnClickListener
updateAction.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(更新){
d(标记“updateAction TriggeredforDownloadAndInstall()”;
下载并安装();
}否则{
Log.d(标记“为checkForUpdates()触发的updateAction”);
checkForUpdates();
}
}
});
但这并不奏效
我忽略了什么吗?我如何实现PreferenceFragment
是出了什么问题还是其他问题
更新
在使用Log
进行一些调试之后,我发现片段甚至没有被创建
次要更新
我感觉XML中的首选项
只识别android:layout
,而不是android:fragment
。我尝试删除布局
,只保留在片段
中,然后它不显示在设置SupdateFragment::onCreateView()中定义的布局
我在片段sonCreate()
中添加了一个调试日志条目,并且日志行从未显示过。因此,问题似乎是片段
没有从首选项
加载。但是为什么呢?“…扩展了首选片段”
…”
及
view = inflater.inflate(R.layout.settings_update_fragment, container, false);
这看起来有点不对劲。如果它不是首选项片段,请不要将其扩展为首选项片段。或者使用addPreferencesFromResource(R.xml.preferences)代码>
可能不是问题,但看起来仍然可疑。您的admin.xml如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/settings_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
为了使首选项的属性android:fragment
有效,您的托管活动必须实现
1.从所有视图2的映射中删除try、catch块。什么是图标化?@avishedas是一个在android应用程序中集成图标的库。我删除了try/catch块,但没有效果,但是我发现片段本身甚至没有被加载。请检查更新的问题。现在用这种方式尝试updateAction.setOnClickListener(新OnClickListener(){@Override public void onClick(视图arg0){//TODO自动生成的方法存根Toast.makeText(getBaseContext(),“单击图像”,Toast.LENGTH_SHORT.show();});并从中删除OnclickListnerimplements@AvishekDas我觉得问题可能出在片段中
根本没有加载。出于某种原因,我的XML中的首选项
忽略了片段
属性,而只识别布局
属性。我通过删除android:layout
进行测试,在setingsupdatefragment::onCreateView()中定义的布局不显示。我还将此信息添加到了问题中。Oo您必须使用FrameLayout。实际上,我只是扩展了片段认为这可能是问题所在,但不幸的是,这没有对它产生任何影响。
class AdminActivity extends Activity
implements PreferenceFragment.OnPreferenceStartFragmentCallback
{
@Override
public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref)
{
try
{
Fragment f = (Fragment) Class.forName(pref.getFragment()).getConstructor().newInstance();
getFragmentManager().beginTransaction().replace(R.id.settings_fragment, f).addToBackStack(null).commit();
return true;
}
catch (Exception e)
{
e.printStackTrace();
}
return false;
}
...