我正在尝试更改选项菜单的默认颜色:白色:我希望选项菜单上的每个项目都有黑色背景.
我在菜单元素中的item元素上尝试了一些类似android:itemBackground ="#000000"的镜头,但它不起作用.
我怎么能做到这一点?
java.lang.NullPointerException
当我尝试ScrollView
在活动中使用时,我会不断获得.
奇怪的是,我Scrollview
在其他活动中使用了完全相同的设置.突然之间,我遇到了错误.我试过清理项目并重建.
而且我已经尝试了这个好老的重启程序.我今天学到了很多关于Null Pointer Exceptions的知识,但是我还没弄清楚为什么我一直在学习渲染问题.
这是java.lang.NullPointerException
在XML上引发的:
java.lang.NullPointerException
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:738)
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:149)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:835)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:811)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:838)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:811)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:838)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:811)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:223)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:426)
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350)
at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:510)
at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:498)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:888)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:498)
at com.android.tools.idea.rendering.RenderTask.access$600(RenderTask.java:72)
at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:610)
at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:607)
at com.android.tools.idea.rendering.RenderService.runRenderAction(RenderService.java:362)
at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:607)
at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:629)
at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.doRender(AndroidLayoutPreviewToolWindowManager.java:652)
at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.access$1700(AndroidLayoutPreviewToolWindowManager.java:80) …
Run Code Online (Sandbox Code Playgroud) android nullpointerexception android-inflate layout-inflater inflate-exception
我在日食中得到以下警告:
视图适配器的无条件布局膨胀:应使用View Holder模式(使用传递给此方法的循环视图作为第二个参数)以实现更平滑的滚动.
上:
convertView = vi.inflate(R.layout.activity_friend_list_row, parent, false);
Run Code Online (Sandbox Code Playgroud)
我有一个实现了CheckBox的基础适配器,我添加了一个标签以使CheckBox工作.
这是代码:
public View getView(final int position, View convertView, ViewGroup parent)
{
ViewHolder mViewHolder;
mViewHolder = new ViewHolder();
LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.activity_friend_list_row, parent, false);
mViewHolder.cb = (CheckBox) convertView.findViewById(R.id.checkBox);
convertView.setTag(mViewHolder);
if (InviteFriends.isChecked[position] == true)
{
mViewHolder.cb.setChecked(true);
}
else
{
mViewHolder.cb.setChecked(false);
}
mViewHolder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean ischecked)
{
if (buttonView.isChecked())
{
InviteFriends.isChecked[position] = true;
}
else
{
InviteFriends.isChecked[position] = false;
}
}
});
TextView …
Run Code Online (Sandbox Code Playgroud) 我正在尝试DialogFragment
使用自定义视图创建AlertDialog
.必须从xml中扩充此视图.在我的DialogFragment
班上,我有:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setTitle("Title")
.setView(getActivity().getLayoutInflater().inflate(R.layout.dialog, null))
.setPositiveButton(android.R.string.ok, this)
.setNegativeButton(android.R.string.cancel, null)
.create();
}
Run Code Online (Sandbox Code Playgroud)
我尝试过其他通胀方法,.setView()
例如:
.setView(getActivity().getLayoutInflater().inflate(R.layout.dialog, (ViewGroup) getView(), false))
Run Code Online (Sandbox Code Playgroud)
和
.setView(getActivity().getLayoutInflater().inflate(R.layout.dialog, (ViewGroup) getTargetFragment().getView(), false))
Run Code Online (Sandbox Code Playgroud)
在显示此对话框的片段中设置目标片段之后.
所有这些尝试使我的自定义视图膨胀都会导致以下异常:
E/AndroidRuntime(32352): android.util.AndroidRuntimeException: requestFeature() must be called before adding content
E/AndroidRuntime(32352): at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:214)
E/AndroidRuntime(32352): at com.android.internal.app.AlertController.installContent(AlertController.java:248)
E/AndroidRuntime(32352): at android.app.AlertDialog.onCreate(AlertDialog.java:314)
E/AndroidRuntime(32352): at android.app.Dialog.dispatchOnCreate(Dialog.java:335)
E/AndroidRuntime(32352): at android.app.Dialog.show(Dialog.java:248)
E/AndroidRuntime(32352): at android.support.v4.app.DialogFragment.onStart(DialogFragment.java:339)
E/AndroidRuntime(32352): at android.support.v4.app.Fragment.performStart(Fragment.java:1288)
E/AndroidRuntime(32352): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:873)
E/AndroidRuntime(32352): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1041)
E/AndroidRuntime(32352): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:625)
E/AndroidRuntime(32352): at …
Run Code Online (Sandbox Code Playgroud) android android-inflate android-fragments layout-inflater android-alertdialog
本问题已移至https://softwarerecs.stackexchange.com/questions/27841/plugins-architecture-for-an-android-app
我想为开源应用程序实现一个插件系统,因为它已经变得非常庞大,只有少数用户需要许多功能.发布不同的应用程序并不是一个好的解决方案,因为userA需要feature7和feature24而userB需要feature39和feature24.
我在哪里可以找到插件架构的好例子?
这是我想要一个插件能够做到的:
例如,其中一个插件必须在特定屏幕上添加一个按钮,单击此按钮会增加应用程序数据库中的值.据我所知,这对内容提供商和意图不可行.
我想避免让核心应用程序的代码复杂化,到处都是大量的钩子.
插件的形式可以是SD卡上的文件,应用程序或其他任何内容.
我有一个ImageView
我附加到MenuItem
它ActionView
(项目出现在ActionBar
).此视图的布局来自XML.我这样膨胀它:
ImageView actionView = (ImageView) layoutInflater.inflate(
R.layout.action_view_layout, null);
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.然而; root
在调用中传递null inflate()
使Lint对我大喊:
避免将null作为视图根传递(需要解析膨胀布局的根元素上的布局参数)
在我的具体情况下,我似乎可以在没有root的情况下进行管理,但我宁愿让代码尽可能正确.问题是,我不确定哪个View
应该用作根.这个答案说它应该是"围绕想要膨胀的视图对象的小部件".但这意味着什么呢?动作栏的那一个?活动?还有别的吗?
更新:阅读答案让我怀疑我正确的做法是:
ActionBar
View
对应的MenuItem
ViewGroup
这似乎有效.任何人都可以确认或否认这是否应该做什么?
有一种方法可以获得layoutInflater:
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Run Code Online (Sandbox Code Playgroud)
另一种方式是:
LayoutInflater inflater = LayoutInflater.from(context);
Run Code Online (Sandbox Code Playgroud)
第三个(当我参加活动时)是:
LayoutInflater inflater = getLayoutInflater();
Run Code Online (Sandbox Code Playgroud)
那么他们之间有什么区别?
请注意,当我将第三个inflater发送到我的适配器时,我的应用程序工作.但是当我发送上下文并通过第二种方式创建了inflater时,它没有!
我正在创建一个包含多个片段的选项卡列表.我注意到,在主要活动中,我曾经setContentView
获得布局xml并用于findViewById
获取相应的UI元素配置.
setContentView(R.layout.fragment_tabs);
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
mTabManager = new TabManager(this, mTabHost, android.R.id.tabcontent);
Run Code Online (Sandbox Code Playgroud)
但是,在不同的片段类中,我必须使用inflater.
View v = inflater.inflate(R.layout.webview, container, false);
WebView myBrowser=(WebView)v.findViewById(R.id.mybrowser);
Run Code Online (Sandbox Code Playgroud)
并且这两个函数都用于获取布局xml来创建一个对象,为什么会有区别?是第一个使用期间onCreate
,第二个期间使用onCreateView
?在什么情况下我应该选择其中之一?
layout android xml-parsing android-lifecycle layout-inflater
我只想从xml布局文件中获取一个对象,而不必将其实现到当前布局中.
我知道的方式
LayoutInflater.from(context).inflate(R.layout.myfile, myparent, true);
Run Code Online (Sandbox Code Playgroud)
但执行完上面后,布局将实现并立即显示在我的"myparent"-View中,对吗?我只想让Object本身获得它的属性等.也许(但只是可能)稍后将其插入到所示的布局中.那可能吗?
问候
我正在尝试将标准浅灰色更改为浅绿色.似乎没有一种简单的方法可以做到这一点(例如通过Android主题),但我找到了一个解决方法,如本页所述:http://tinyurl.com/342dgn3.
作者似乎消失了,有人可以帮我整合这段代码吗?我不明白我需要在哪里实现LayoutInflater
工厂类.
android ×10
layout-inflater ×10
java ×2
actionview ×1
background ×1
dalvik ×1
dex ×1
layout ×1
menu ×1
menuitem ×1
xml-parsing ×1