相关疑难解决方法(0)

Android:View.setID(int id)以编程方式 - 如何避免ID冲突?

我在for循环中以编程方式添加TextViews并将它们添加到ArrayList.

我该怎么用TextView.setId(int id)?我提出了什么整数ID,所以它不与其他ID冲突?

android conflict android-view

305
推荐指数
10
解决办法
23万
查看次数

findViewById不适用于包含?

我有一个像:

<include
    android:id="@+id/placeHolder"
    layout="@layout/test" />
Run Code Online (Sandbox Code Playgroud)

include布局看起来像(test.xml):

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/outer"
    ... >

    <ImageView
        android:id="@+id/inner"
        ... />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

我似乎无法在运行时找到id ="inner"的内部ImageView:

ImageView iv = (ImageView)findViewById(R.id.inner);
if (iv == null) {
    Log.e(TAG, "Not found!");
}
Run Code Online (Sandbox Code Playgroud)

我应该能找到它吗?似乎因为它使用"include",正常的findViewById方法不起作用.

----------更新----------------

所以我可以找到分配给include的id:

View view = findViewById(R.id.placeHolder); // ok
Run Code Online (Sandbox Code Playgroud)

但我找不到任何一个像id的孩子:

view.findViewById(R.id.outer); // nope
view.findViewById(R.id.inner); // nope
Run Code Online (Sandbox Code Playgroud)

如果我尝试直接搜索它们,就像原来一样:

findViewById(R.id.outer); // nope
findViewById(R.id.inner); // nope
Run Code Online (Sandbox Code Playgroud)

是不是只是在运行时剥离了元素?

谢谢

android

40
推荐指数
2
解决办法
3万
查看次数

在AppWidget的情况下重用布局

我有几个非常相似的布局AppWidget,实际上只有一个TextView元素的旋转不同(我根据屏幕方向选择合适的布局).

所以,不要多次重复相同的东西(我讨厌重复),我想我会通过重新使用布局来<include/>尝试整理一些东西.

当我试图通过ID引用布局的特定元素时,问题出现了.如果元素在包含的布局xml中,对于 -AppWidget布局,我使用了这里描述的方法,其中使用了两层方法...

在"父"布局中:

<include layout="@layout/my_layout" android:id="@+id/textview_layout" />
Run Code Online (Sandbox Code Playgroud)

在代码中:

TextView tv = (TextView)findViewById(R.id.textview_layout).findViewById(R.id.textview);
tv.setText("test");
Run Code Online (Sandbox Code Playgroud)

... TextView"子"布局中的ID的位置textview.所以这是一个两阶段的方法,你首先引用View包含TextView你想要的东西,然后引用TextView它.

但是对于AppWidgets而言,不是直接与之交易,而是TextView必须通过一切来做RemoteViews.

所以代替:

TextView textView = (TextView)findViewById(viewId);
textView.setText("text");
Run Code Online (Sandbox Code Playgroud)

你必须这样做:

remoteViews.setTextViewText(viewId, "text");
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
Run Code Online (Sandbox Code Playgroud)

鉴于进入的接口RemoteViews是通过传递单个(直接)视图ID,您将如何引用包含文件中的元素?

android android-layout android-appwidget

6
推荐指数
1
解决办法
103
查看次数