- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Android 版本 = 2.2
使用 inflate()
以编程方式将 RelativeLayout
添加到 main_menu.xml
中的 LinearLayout
.线性布局(ID 是 main_menu.xml
中的 item_list
)是一个用于保存项目列表的容器。每个项目都是一个相对布局,将在从服务器接收数据后以编程方式添加到回调函数中。
应用程序在执行此语句(错误消息中为 MainActivity.java:693)时崩溃,
RelativeLayout relativeLayout = (RelativeLayout) RelativeLayout.inflate(MainActivity.this, R.layout.template_item_list_cell, linearLayoutItemList);
但是,如果在以下 updateItemList()
中将上述语句替换为这些语句,则该应用程序运行良好,
RelativeLayout relativeLayout = new RelativeLayout(MainActivity.this);
RelativeLayout.LayoutParams relativeLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, height);
relativeLayout.setLayoutParams(relativeLayoutParams);
relativeLayout.setBackgroundResource(R.color.cell_state);
relativeLayout.setClickable(true);
并插入这条语句,
linearLayoutItemList.addView(relativeLayout);
评论后,
// Add the RelativeLayout to LinearLayout
08-07 13:54:44.689: W/dalvikvm(23363): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
08-07 13:54:44.699: E/AndroidRuntime(23363): FATAL EXCEPTION: main
08-07 13:54:44.699: E/AndroidRuntime(23363): java.lang.ClassCastException: android.widget.LinearLayout
08-07 13:54:44.699: E/AndroidRuntime(23363): at com.domainname.appname.android.MainAc$12$1.run(MainActivity.java:693)
08-07 13:54:44.699: E/AndroidRuntime(23363): at android.os.Handler.handleCallback(Handler.java:587)
08-07 13:54:44.699: E/AndroidRuntime(23363): at android.os.Handler.dispatchMessage(Handler.java:92)
08-07 13:54:44.699: E/AndroidRuntime(23363): at android.os.Looper.loop(Looper.java:130)
08-07 13:54:44.699: E/AndroidRuntime(23363): at android.app.ActivityThread.main(ActivityThread.java:3691)
08-07 13:54:44.699: E/AndroidRuntime(23363): at java.lang.reflect.Method.invokeNative(Native Method)
08-07 13:54:44.699: E/AndroidRuntime(23363): at java.lang.reflect.Method.invoke(Method.java:507)
08-07 13:54:44.699: E/AndroidRuntime(23363): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
08-07 13:54:44.699: E/AndroidRuntime(23363): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
08-07 13:54:44.699: E/AndroidRuntime(23363): at dalvik.system.NativeStart.main(Native Method)
res/layout/main_menu.xml
<?xml version="1.0" encoding="utf-8"? >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#555555"
android:orientation="vertical" >
</LinearLayout>
res/layout/template_item_list_cell.xml
<?xml version="1.0" encoding="utf-8"? >
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="41dp"
android:background="@color/cell_state"
android:clickable="true"
android:visibility="gone" >
</RelativeLayout>
res/color/cell_state.xml
<?xml version="1.0" encoding="utf-8"? >
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Active state -->
<item
android:state_selected="true"
android:state_focused="false"
android:state_pressed="false"
android:drawable="@color/MyDarkGray" />
<!-- Inactive state-->
<item
android:state_selected="false"
android:state_focused="false"
android:state_pressed="false"
android:drawable="@color/MyGray" />
<!-- Pressed state-->
<item
android:state_pressed="true"
android:drawable="@color/MyDarkGray" />
<!-- Selected state (using d-pad) -->
<item
android:state_focused="true"
android:state_selected="true"
android:state_pressed="false"
android:drawable="@color/MyDarkGray" />
</selector>
res/values/customized_colors.xml
<?xml version="1.0" encoding="utf-8"? >
<resources>
<color name="MyGray">#555555</color>
<color name="MyDarkGray">#333333</color>
</resources>
src/com.domainname.appname.android/MainActivity.java
public class MainActivity extends Activity {
@Override
public void onCreate{
// Some initialization
setContentView(R.layout.main_menu);
// Some other initialization
}
public void updateItemList() {
// Remove previous items in the list
LinearLayout linearLayoutItemList = (LinearLayout) menu.findViewById(R.id.item_list); // The linear layout is given an ID of item_list in main_menu.xml
linearLayoutItemList.removeAllViews();
// Request to server and define the callback function to add item(s) to the list programmatically
JSONObject json = new JSONObject();
MyRequestClass request = new MyRequestClass();
request.request(MyConstants.WEB_BASE_URL, "app/get_latest_item_list", json, new MyCallbackClass() {
@Override
public void run(final JSONObject json) {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
String jsonInString = json.toString();
JSONArray jsonArray = json.getJSONArray("data");
// Suppose the JSON is properly returned
int numberOfItemListItems = jsonArray.length();
RelativeLayout relativeLayoutItemListTitleBar = (RelativeLayout) menu.findViewById(R.id.item_list_title_bar);
View viewDivider1 = (View) menu.findViewById(R.id.item_list_divider_1);
View viewDivider2 = (View) menu.findViewById(R.id.item_list_divider_2);
LinearLayout linearLayoutItemList = (LinearLayout) menu.findViewById(R.id.item_list);
View viewDivider3 = (View) menu.findViewById(R.id.item_list_divider_3);
View viewDivider4 = (View) menu.findViewById(R.id.item_list_divider_4);
if (0 == numberOfItemListItems) {
relativeLayoutItemListTitleBar.setVisibility(RelativeLayout.GONE);
viewDivider1.setVisibility(View.GONE);
viewDivider2.setVisibility(View.GONE);
linearLayoutItemList.setVisibility(LinearLayout.GONE);
viewDivider3.setVisibility(View.GONE);
viewDivider4.setVisibility(View.GONE);
} else {
relativeLayoutItemListTitleBar.setVisibility(RelativeLayout.VISIBLE);
viewDivider1.setVisibility(View.VISIBLE);
viewDivider2.setVisibility(View.VISIBLE);
linearLayoutItemList.setVisibility(LinearLayout.VISIBLE);
viewDivider3.setVisibility(View.VISIBLE);
viewDivider4.setVisibility(View.VISIBLE);
for (int index = 0; index < numberOfItemListItems; index++) {
try {
JSONObject currentJsonObject = jsonArray.getJSONObject(index);
// Extract item title
String currentTitle = currentJsonObject.getString("Title");
// Extract icon image URI
final String currentIconImageUri = ITEM_ICON_IMAGE_BASE_URL + currentJsonObject.getString("IconImageUri");
// Extract item ID
final String currentItemId = currentJsonObject.getString("ItemIdUri");
// Create a cell to display the item
linearLayoutItemList = (LinearLayout) menu.findViewById(R.id.item_list);
// Create RelativeLayout for the cell
int height = (int) (getResources().getDisplayMetrics().density * 41 + 0.5f); // 41dp height
RelativeLayout relativeLayout = (RelativeLayout) LinearLayout.inflate(linearLayoutItemList.getContext(), R.layout.template_item_list_cell, linearLayoutItemList);
relativeLayout.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
selectItemListCell(currentItemId);
}
});
// Add icon image to a ImageView and add that TextView to RelativeLayout
ImageView imageView = new ImageView(MainActivity.this);
imageView = loadImageWithUrlString(imageView, currentIconImageUri);
int width = (int) (getResources().getDisplayMetrics().density * 31 + 0.5f); // 31dp height
height = (int) (getResources().getDisplayMetrics().density * 31 + 0.5f); // 31dp height
RelativeLayout.LayoutParams relativeLayoutParams1 = new RelativeLayout.LayoutParams(width, height);
relativeLayoutParams1.addRule(RelativeLayout.CENTER_VERTICAL);
relativeLayoutParams1.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
int marginLeft = (int) (getResources().getDisplayMetrics().density * 10 + 0.5f); // 10dp
int marginTop = (int) (getResources().getDisplayMetrics().density * 5 + 0.5f); // 5dp
int marginRight = (int) (getResources().getDisplayMetrics().density * 0 + 0.5f); // 0dp
int marginBottom = (int) (getResources().getDisplayMetrics().density * 5 + 0.5f); // 5dp
relativeLayoutParams1.setMargins(marginLeft, marginTop, 0, marginBottom);
imageView.setLayoutParams(relativeLayoutParams1);
relativeLayout.addView(imageView);
// Add title text to a TextView and add that TextView to RelativeLayout
TextView textView = new TextView(MainActivity.this);
textView.setText(currentTitle);
float shadowRadius = 2.0f;
int shadowDx = 0;
int shadowDy = 1;
int shadowColor = 0xFF000000;
textView.setShadowLayer(shadowRadius, shadowDx, shadowDy, shadowColor);
RelativeLayout.LayoutParams relativeLayoutParams2 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
relativeLayoutParams2.addRule(RelativeLayout.CENTER_VERTICAL);
marginLeft = (int) (getResources().getDisplayMetrics().density * 56 + 0.5f); // 56dp
marginRight = (int) (getResources().getDisplayMetrics().density * 43 + 0.5f); // 43dp
relativeLayoutParams2.setMargins(marginLeft, 0, marginRight, 0);
textView.setLayoutParams(relativeLayoutParams2);
relativeLayout.addView(textView);
// Add the RelativeLayout to LinearLayout
// linearLayoutItemList.addView(relativeLayout);
// Add divider to the LinearLayout
if (index < (numberOfItemListItems - 1)) {
View view1 = new View(MainActivity.this);
height = (int) (getResources().getDisplayMetrics().density * 0.5 + 0.5f); // 0.5dp height
RelativeLayout.LayoutParams relativeLayoutParams3 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, height);
view1.setLayoutParams(relativeLayoutParams3);
view1.setBackgroundColor(0xFF323232);
linearLayoutItemList.addView(view1);
View view2 = new View(MainActivity.this);
height = (int) (getResources().getDisplayMetrics().density * 0.5 + 0.5f); // 0.5dp height
RelativeLayout.LayoutParams relativeLayoutParams4 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, height);
view2.setLayoutParams(relativeLayoutParams4);
view2.setBackgroundColor(0xFF595959);
linearLayoutItemList.addView(view2);
}
} catch (JSONException e) {
// Oops
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}); // End of runOnUiThread()
}
});
} // End of updateItemList
} // End of MainActivity
最佳答案
错误表明您有一个 ClassCastException
,这意味着您没有正确转换类。对于布局参数与所用布局之间的关系,大多数人似乎都有疑问。
它应该是这样的:
您应该将父类型的布局参数分配给您的布局。例如,假设您有这个
LinearLayout 中的按钮
如果你想将 LayoutParams
设置为 button
它们必须是类型 LinearLayout.LayoutParams
这是按钮父级 ViewGroup
(每个布局本质上都是一个 ViewGroup - LinearLayout、RelativeLayout 等。)
在您的情况下,LayoutParams 应该是 LinearLayout 类型。其他一切正常。
关于Android 应用程序在膨胀新 View 元素时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18095822/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!