Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用公共资源<;T扩展视图>;T findviewbyd(int-id);在活动Android编译sdk 26中?_Java_Android_Android Fragments - Fatal编程技术网

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上的用户默认设置即可