Java 如何使用公共资源<;T扩展视图>;T findviewbyd(int-id);在活动Android编译sdk 26中?
我注意到,在使用新的Java 如何使用公共资源<;T扩展视图>;T findviewbyd(int-id);在活动Android编译sdk 26中?,java,android,android-fragments,Java,Android,Android Fragments,我注意到,在使用新的compilesdkversion26时,片段中不再需要强制转换(android.support.v4.app.Fragment)。但是在AppCompatActivity 我对这个问题有一些初步的发现: a。在片段中,始终使用新的findViewById()方法,并与此对应: public <T extends android.view.View> T findViewById(int id) { /* compiled code */ } public T
compilesdkversion26
时,片段中不再需要强制转换(android.support.v4.app.Fragment
)。但是在AppCompatActivity
我对这个问题有一些初步的发现:
a。在片段中,始终使用新的findViewById()
方法,并与此对应:
public <T extends android.view.View> T findViewById(int id) { /* compiled code */ }
public T findViewById(int-id){/*编译代码*/}
b。起初我认为这意味着这与活动有关,但使用getActivity().findViewById()
也会这样做
c。这让我认为活动继承自另一个类,但当我向上跟踪getActivity()
和AppCompatActivity
时,我发现它们都扩展了“FragmentActivity”
d。在活动中尝试使用findViewById()
方法时,建议使用这两种方法,但最后始终需要强制转换,尽管选择了所需的方法
e。我找到了一份工作。据说新的findViewById()
方法属于视图
,所以我尝试在视图
中找到一个视图
,类似这样的TextView tv=otherView.findViewById()
,但仍然需要转换
那么,如何在活动中使用新的
findViewById()
方法呢?代码实际上非常简单,您可以自己将其添加到任何需要它的类(或公共基类):
受保护的T findViewById(@IdRes int-id){
返回(T)getRootView().findViewById(id);
}
您甚至可以将其重命名为任何您想要的名称,以解决潜在的名称冲突
谷歌终于将其添加到了框架中。代码实际上非常简单,您可以自己将其添加到任何需要它的类(或公共基类):
受保护的T findViewById(@IdRes int-id){
返回(T)getRootView().findViewById(id);
}
您甚至可以将其重命名为任何您想要的名称,以解决潜在的名称冲突
一直在使用它,谷歌终于将它添加到框架中。我要感谢@commonware,因为他的评论引导我找到了解决方案 我使用的是compile
'com.android.support:appcompat-v7:26.+'
,以前无法更改它,因为即使我尝试使用0.0
版本,同步也会失败,因为缺少依赖项,这导致我失败
同样,正如@commonware所指出的,解决方案是使用库'com.android.support:appcompat-v7:26.0.0'
中提供的AppCompatActivity
。要做到这一点,您必须在项目依赖项url”中包含Maven Googlehttps://maven.google.com“
这有点令人沮丧,因为现在只剩下等待Android Studio上的用户默认使用它了
gradle:project
allprojects {
repositories {
jcenter()
maven {
url "https://maven.google.com"
}
}
}
gradle:app
dependencies {
compile 'com.android.support:appcompat-v7:26.0.0'
}
我要感谢@commonware,因为他的评论引导我找到了解决方案 我使用的是compile
'com.android.support:appcompat-v7:26.+'
,以前无法更改它,因为即使我尝试使用0.0
版本,同步也会失败,因为缺少依赖项,这导致我失败
同样,正如@commonware所指出的,解决方案是使用库'com.android.support:appcompat-v7:26.0.0'
中提供的AppCompatActivity
。要做到这一点,您必须在项目依赖项url”中包含Maven Googlehttps://maven.google.com“
这有点令人沮丧,因为现在只剩下等待Android Studio上的用户默认使用它了
gradle:project
allprojects {
repositories {
jcenter()
maven {
url "https://maven.google.com"
}
}
}
gradle:app
dependencies {
compile 'com.android.support:appcompat-v7:26.0.0'
}
这是一个很好的解决方法,但我特别希望使用新方法,感谢您的帮助这是一个很好的解决方法,但我特别希望使用新方法,感谢您的帮助“但我在AppCompatActivity中无法获得相同的方法”--您使用的是
appcompat-v7
的26.0.0
@你的答案帮我弄清楚!我使用的是compile'com.android.support:appcompat-v7:26.+'
,以前无法更改它,因为即使我尝试使用0.0
版本,同步也会失败,因为缺少依赖项,这会导致我找到这个答案,因此只需等待android Studio上的用户默认设置即可“但我在AppCompatActivity中无法获得相同的方法“--您是否正在使用appcompat-v7的26.0.0
?”@你的答案帮我弄清楚!我使用的是compile'com.android.support:appcompat-v7:26.+'
,以前无法更改它,因为即使我尝试使用0.0
版本,同步也会失败,因为缺少依赖项,这会导致我找到这个答案,因此只需等待android Studio上的用户默认设置即可