我有一个带有GridLayoutManager的RecyclerView,每行有2列.因为开发适用于Android TV,所以我需要专注于导航.

如果我使用向下键导航到任何可见项目,这没关系.例如,项目1 - >项目3 - >项目5 - >项目7(仅部分可见.).但是当我再次按下键时,焦点将转移到第10项而不是9.

我的网格视图适配器是:
public class GridAdapter extends RecyclerView.Adapter<GridAdapter.ViewHolder> {
private ArrayList<String> mDataset;
public GridAdapter(ArrayList<String> myDataset) {
mDataset = myDataset;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.grid_item, viewGroup, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.txtTitle.setText(mDataset.get(position));
}
@Override
public int getItemCount() {
return mDataset.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView txtTitle;
public ViewHolder(View v) …Run Code Online (Sandbox Code Playgroud) 嗨,截至昨天,我能够通过WiFi构建并推送apk文件到ADT-1 Android电视设备.然后设备有更新,现在我不再能够连接到设备.我认为允许连接的端口号adb已经改变了......但是到了什么?
是的我确保IP地址有效并使用端口号"4321".Ping设备有效.但它给我的错误:"无法连接到10.0.0.86:4321:4321"
我试图通过以太网和WiFi连接.两者都失败了
我已经安装了androidtv-sample-inputs,所以我可以伪造一些电视输入并有一些频道,我想获得有关该频道的信息,但是,当我查询获取该信息时,我得到一个空游标.
到目前为止我尝试的是:
TvInputManager tv = (TvInputManager)getApplicationContext().getSystemService(Context.TV_INPUT_SERVICE);
List<TvInputInfo> list = tv.getTvInputList();
String[] projection = {
TvContract.Channels._ID,
TvContract.Channels.COLUMN_DISPLAY_NUMBER
};
ContentResolver cr = getContentResolver();
Iterator<TvInputInfo> it = list.iterator();
while(it.hasNext()) {
TvInputInfo aux = it.next();
Uri uri = TvContract.buildChannelsUriForInput(aux.getId());
Log.d("TAG", uri.toString());
Log.d("TAG", aux.toString());
Cursor cur = cr.query(uri, projection, null, null ,null);
Log.d("TAG", cur.toString());
if(cur.moveToFirst()) {
Log.d("TAG", "not empty cursors");
}
}
Run Code Online (Sandbox Code Playgroud)
我已经添加了使用许可,我已经检查过电视输入没有传递.
<uses-permission android:name="com.android.providers.tv.permission.READ_EPG_DATA" />
<uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
<uses-permission android:name="com.android.providers.tv.permission.ACCESS_ALL_EPG_DATA"/>
Run Code Online (Sandbox Code Playgroud) 如何删除Android TV的BrowseFragment中的searchOrbView?
我看到了一种设置颜色的方法(setSearchAffordanceColors),但无法实际删除SearchOrbView
由于TitleView是BrowseFragment的私有成员(而TitleView是获取SearchOrbView的方式),我认为无法实际删除SearchOrbView
我正在为AndroidTV制作申请并收到错误
java.lang.UnsatisfiedLinkError:
dalvik.system.PathClassLoader[DexPathList[[zip file
"/data/app/mytv.mytv-2/base.apk"
Run Code Online (Sandbox Code Playgroud)
在Android 6.0.1的NexusPlayer上.好奇它适用于Android 5.1.1的智能电视.
整个文本错误是:
java.lang.UnsatisfiedLinkError:
dalvik.system.PathClassLoader[DexPathList[[zip file
"/data/app/mytv.mytv-2/base.apk"],nativeLibraryDirectories=[/data/app/mytv.mytv-2/lib/x86, /data/app/mytv.mytv-2/base.apk!/lib/x86, /vendor/lib, /system/lib]]]
couldn't find "libnmpsdk.so"
Run Code Online (Sandbox Code Playgroud)
如果有帮助.
(jniLabs很好用2个文件夹armeabi和armeabi-v7a,每个文件夹都有libnmpsdk.so)
日志显示的错误行包含以下部分代码:
static {
System.loadLibrary("nmpsdk");
}
Run Code Online (Sandbox Code Playgroud)
如果有人遇到过这个问题,请告诉我,我还没有找到解决问题的方法.
提前致谢.
我面临一个奇怪的问题,我不确定是什么导致了它.基本上,我正在使用ErrorFragment类来显示错误,简单吧?
问题与使用按钮单击侦听器设置有关setButtonClickListener.当MainFragment最初被加载,按钮不能在我的Android电视遥控器注册任何点击.
但是,如果我MainFragment使用遥控器上的后退按钮重新加载,则按钮会记录点击次数.
谁能给我一些关于为什么会发生这种情况的见解?
谢谢!
MainActivity.java:
public class MainActivity extends Activity
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Run Code Online (Sandbox Code Playgroud)
activity_main.xml中:
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_browse_fragment"
android:name="com.ui.MainFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.ui.MainActivity"
tools:deviceIds="tv"
tools:ignore="MergeRootFrame" />
Run Code Online (Sandbox Code Playgroud)
MainFragment.java:
public class MainFragment extends DetailsFragment
{
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
setupUIElements();
if (isConnectingToInternet() == true)
{
prepareBackgroundManager();
loadRows();
setupEventListeners();
}
else
{
InternetConnectivityFragment internetError = new InternetConnectivityFragment();
getFragmentManager().beginTransaction().add(R.id.main_browse_fragment, internetError).commit();
}
}
public class GetInternetStatus extends …Run Code Online (Sandbox Code Playgroud) 我正在研究一个Android TV应用程序,我面临一个与项目点击监听器相关的奇怪问题:一切正常,但有时点击不会传播,很可能没有设置监听器.
我有子类RowsFragment,我用6个元素的行显示我的图像:这意味着网格的每一行实际上都是适配器中的一行,即使视觉上照片的月份相同.请查看图片以便更好地理解.
现在的问题是:当我启动应用程序并向下滚动时,上面图像中看不到的第一行(所以第四行,因为这里有3行被渲染),没有得到我的"点击",没有任何反应.对于第5行,第6行......也可能是这样但是然后(我没有识别出模式)行再次开始可点击(即第8,第9,......)前3行也总是可点击的.
如果我再次向上滚动并且那些不可点击的行再次出现在屏幕上,现在它们是可点击的.
在onCreate片段中,我调用:
setOnItemViewClickedListener(new ItemViewClickedListener());
并且根据文档,这应该覆盖单项视图设置的侦听器.它还建议设置一个监听器,而不是两个:实际上我只是为片段设置了一个监听器.
在Presenter单行项的类中,我尝试onCreateViewHolder在视图中添加一个单击侦听器,并且我发现问题发生时,将调用此侦听器.
因此,在某些情况下,整个片段侦听器似乎不会覆盖视图侦听器,或者根本不设置它.
这个问题让我担心的是,当我设置断点并停止滚动动画时,我无法在调试模式下重现它.
我正在使用最新的Leanback版本:
compile 'com.android.support:leanback-v17:25.3.1'
Run Code Online (Sandbox Code Playgroud)
这个问题在Nvidia Shield TV(Android 7.0)上是可重现的,在其他设备上并不确定.
更新:有趣的是,当一个项目在一行中无法点击时,我希望同一行中的所有项目都不可点击.相反,事实并非如此,有些是可点击的,有些则不是.
更新2:似乎ListRowPresenterItemBridgeAdapter方法onBind,在某些情况下,发现getOnItemViewClickedListener返回null,因此没有设置项目单击侦听器.这很奇怪,因为监听器是为主RowsFragment类设置的,它适用于大多数项目,也适用于那些不起作用的项目.
作为一种解决方法,我找到了这个解决方案:子类化ListRowPresenter并设置一个虚拟点击监听器.
private class GroupedListRowPresenter extends ListRowPresenter {
GroupedListRowPresenter(int focusZoomFactor) {
super(focusZoomFactor);
}
@Override
protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {
super.onBindRowViewHolder(holder, item);
holder.setOnItemViewClickedListener(new BaseOnItemViewClickedListener() {
@Override
public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder
rowViewHolder, Object row) {
Timber.d("item click …Run Code Online (Sandbox Code Playgroud) 当用户决定在电影期间按"主页"时,我想在后台继续播放.
我按照指南在这里: https://developer.android.com/training/tv/playback/options.html
并编写以下代码(WHICH WORKS):
@Override
public void onPause() {
super.onPause();
if (mVideoView.isPlaying())
{
// Argument equals true to notify the system that the activity
// wishes to be visible behind other translucent activities
if (! requestVisibleBehind(true)) {
// App-specific method to stop playback and release resources
// because call to requestVisibleBehind(true) failed
stopPlayback();
}
} else {
// Argument equals false because the activity is not playing
requestVisibleBehind(false);
}
}
@Override
public void onVisibleBehindCanceled() {
// App-specific method to …Run Code Online (Sandbox Code Playgroud) 我尝试将Android TV应用程序移动到Android工作室.当我尝试编译它时,我有一些导入错误.我找不到可以添加到build.gradle的依赖项来修复这些问题.进口清单是:
import android.media.tv.TvContentRatingSystemInfo;
import android.media.tv.TvContract.WatchedPrograms;
import com.android.tv.tuner.data.nano.Track.AtscCaptionTrack;
import com.android.tv.tuner.data.nano.Track.AtscAudioTrack;
import com.android.tv.tuner.data.nano.Channel;
Run Code Online (Sandbox Code Playgroud)
build.gradle是:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
applicationId "com.android.tv"
minSdkVersion 23
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk {
moduleName "libtunertvinput_jni"
}
}
sourceSets {
main {
res.srcDirs = ['src/main/res', 'src/main/usbtuner-res']
jni.srcDirs = []
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) …Run Code Online (Sandbox Code Playgroud) 我在 Play 商店中发布了 Android TV 应用程序。我通过访问选择了 Android TV Setup > Advanced Settings > Release Types。后来由于正当理由被拒绝,我收到了一封电子邮件。
现在,我修复了问题并发布了新版本。
\n我预计高级设置中 Android TV 部分的Rejected状态会更改为。In Review
但是,可悲的是,它只是表明了Update rejected。目前尚不清楚这是否意味着新的更新被拒绝。我没有收到任何电子邮件。即使“政策”部分中的错误消息仅显示最后一次拒绝的详细信息,日期也反映了第一次拒绝的情况。
现在,我认为,发布更新后甚至没有启动审核。我如何发起审核?我试过opt-out \xe2\x87\xa8 save \xe2\x87\xa8 opt-in。即使如此,它也不会进入in review状态。
任何帮助表示赞赏...
\n\n\n\n请注意,该应用程序的新版本已被批准为常规应用程序。拒绝仅在Android TV.