- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Android 的新手,特别是 Fragments,我正面临这个我无法解决的问题,我在这里搜索并发现了一些类似的问题,但没有一个能帮助解决我的问题:
我有一个 Activity 包含一个 TabLayout 和一个 ViewPager 以及一个 fragment 适配器。 PageAdapter 从数据库中获取一些数据并将其发送到三个 fragment 。用户可以更改 Activity 中的日期,它应该重新加载新数据。
Activity 首次加载后,API 16/17 一切正常,但从 18 开始,它不会显示任何数据。此外,当用户更改日期时,第一个和最后一个选项卡会正确更新数据,但第二个和中间选项卡会继续显示过去的内容。
CardapioActivity 的代码
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.ImageButton;
import android.widget.Spinner;
import android.widget.TextView;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Locale;
public class CardapioActivity extends AppCompatActivity {
public TextView msg, data;
private DatePickerDialog toDatePickerDialog;
private SimpleDateFormat dateFormatter;
private Calendar myCalendar;
private TabLayout tabLayout;
private ViewPager viewPager;
private String restaurante;
private ArrayList<String> lista = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cardapio);
msg = (TextView) findViewById(R.id.tv1);
data = (TextView) findViewById(R.id.data);
Intent intent = getIntent();
restaurante = intent.getStringExtra("restaurante");
lista = intent.getStringArrayListExtra("lista");
msg.setText(restaurante);
msg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
alertaRestaurante();
carregaFragment();
}
});
//formata data e possibilita seleção a partir do calendário
myCalendar = Calendar.getInstance();
dateFormatter = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
data.setText(dateFormatter.format(myCalendar.getTime()).toString());
data.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertaCalendario();
carregaFragment();
}
});
//fecha página caso clicado em close
final ImageButton close = (ImageButton) findViewById(R.id.close);
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//volta pra activity do mapa
Intent intent = new Intent(CardapioActivity.this, MainActivity.class);
CardapioActivity.this.startActivity(intent);
CardapioActivity.this.finish();
}
});
carregaFragment();
}
carregaFrament() 方法负责创建 TabLayot 并使用 ViewPager 对其进行设置
private void carregaFragment(){
//viewPager
viewPager = (ViewPager) findViewById(R.id.vp);
viewPager.setAdapter(new CustomSlidePageAdapter(getSupportFragmentManager(), CardapioActivity.this));
//tabLayout
tabLayout = (TabLayout) findViewById(R.id.tab);
tabLayout.setupWithViewPager(viewPager);
}
这是 PagerAdapter
private class CustomSlidePageAdapter extends FragmentStatePagerAdapter {
Bundle bundle = new Bundle();
private String pages [] = {"DESJEJUM", "ALMOÇO", "JANTA"};
private Context context;
public CustomSlidePageAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
ArrayList<Cardapio> lista_desjejum = carregaCardapio("desjejum", msg.getText().toString(), data.getText().toString());
bundle.putParcelableArrayList("lista_desjejum", lista_desjejum);
// set Fragmentclass Arguments
DesjejumFragment desjejum = new DesjejumFragment();
desjejum.setArguments(bundle);
return desjejum;
case 1:
ArrayList<Cardapio> lista_almoco = carregaCardapio("almoco", msg.getText().toString(), data.getText().toString());
bundle.putParcelableArrayList("lista_almoco", lista_almoco);
// set Fragmentclass Arguments
AlmocoFragment almoco = new AlmocoFragment();
almoco.setArguments(bundle);
return almoco;
case 2:
ArrayList<Cardapio> lista_janta = carregaCardapio("janta", msg.getText().toString(), data.getText().toString());
bundle.putParcelableArrayList("lista_janta", lista_janta);
// set Fragmentclass Arguments
JantaFragment janta = new JantaFragment();
janta.setArguments(bundle);
return janta;
default:
return null;
}
}
@Override
public int getCount() {
return pages.length;
}
@Override
public CharSequence getPageTitle(int position){
return pages[position];
}
}
这里是三个 fragment 中的一个例子,它们的编码都相似
import android.support.v4.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
public class DesjejumFragment extends ListFragment {
private ArrayList<Cardapio> c = new ArrayList<>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
c = getArguments().getParcelableArrayList("lista_desjejum");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_desjejum, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ListaCardAdapter adapter = new ListaCardAdapter(getActivity(), c);
setListAdapter(adapter);
}
这里有一些图片来说明这个问题:
first time on the left, changed date on the right
in the middle tag it doesn't change
这是我尝试在 API 级别 >18 上切换选项卡时的一些 logcat
04-12 23:13:16.831 31009-31009/br.ufrrj.lothar.rural D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
04-12 23:13:16.941 31009-7797/br.ufrrj.lothar.rural I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
04-12 23:13:16.941 31009-7797/br.ufrrj.lothar.rural I/qtaguid: Tagging socket 48 with tag ad7277400000000{181872500,0} for uid -1, pid: 31009, getuid(): 10169
04-12 23:13:16.981 31009-7797/br.ufrrj.lothar.rural I/qtaguid: Untagging socket 48
04-12 23:13:17.551 31009-31009/br.ufrrj.lothar.rural D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
04-12 23:13:19.661 31009-31009/br.ufrrj.lothar.rural D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
04-12 23:13:19.791 31009-7859/br.ufrrj.lothar.rural I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
04-12 23:13:19.791 31009-7859/br.ufrrj.lothar.rural I/qtaguid: Tagging socket 48 with tag ad7277400000000{181872500,0} for uid -1, pid: 31009, getuid(): 10169
04-12 23:13:19.841 31009-7859/br.ufrrj.lothar.rural I/qtaguid: Untagging socket 48
04-12 23:13:20.741 31009-31009/br.ufrrj.lothar.rural D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
04-12 23:13:22.611 31009-31009/br.ufrrj.lothar.rural D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
04-12 23:13:22.741 31009-7910/br.ufrrj.lothar.rural I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
04-12 23:13:22.741 31009-7910/br.ufrrj.lothar.rural I/qtaguid: Tagging socket 48 with tag ad7277400000000{181872500,0} for uid -1, pid: 31009, getuid(): 10169
04-12 23:13:22.781 31009-7910/br.ufrrj.lothar.rural I/qtaguid: Untagging socket 48
有人能帮帮我吗?P.S.:对于葡萄牙语中的一些变量和方法,可能会造成混淆,提前抱歉。
更新:在 API 级别 21 上,它仅在中间选项卡中显示内容,23 级则什么都不显示。
最佳答案
对于第一个问题,请从 Logcat 和导入中上传一些日志,以帮助社区了解您遇到此问题的原因。
对于第二个问题,您需要更改 fragment 的限制。这个非常重要。使用 viewPager.setOffscreenPageLimit(int);
关于android - ViewPager 不显示 API 级别 >18 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43376377/
Android 项目中最低(最低 sdk)和最高(目标 sdk)级别是否有任何影响。这些东西是否会影响项目的可靠性和效率。 最佳答案 没有影响,如果您以 SDK 级别 8 为目标,那么您的应用将以 9
我将现有的 android 项目升级到 API 级别 31。我使用 Java 作为语言。我改变了 build.gradle compileSdkVersion 31 defaultConfig {
我正在使用 ionic 3 创建一个 android 应用程序,当我尝试上传到 playstore 时,我收到一个错误,提示我的应用程序以 api 25 为目标,当我检查我的 project.prop
我刚刚尝试将应用程序的目标和编译 API 级别更新为 29 (Android 10),并注意到我无法再编译,因为 LocationManager.addNmeaListener 只接受 OnNmeaM
我的代码没有在 Kitkat 上显示工具栏。 这是我的两个 Android 版本的屏幕截图。 Kitkat 版本: Lollipop 版: 这背后的原因可能是什么。 list 文件
我正在构建面向 API 级别 8 的 AccessabilityService,但我想使用 API 级别 18 中引入的功能 (getViewIdResourceName())。这应该可以通过使用 A
当我想在我的电脑上创建一个 android 虚拟机时,有两个选项可以选择目标设备。它们都用于相同的 API 级别。那么我应该选择哪一个呢?它们之间有什么区别? 最佳答案 一个是基本的 Android,
当我选择 tagret 作为 Android 4.2.2(API 级别 17)时,模拟器需要很长时间来加载和启动。 所以我研究它并通过使用 找到了解决方案Intel Atom(x86) 而不是 ARM
我有一个使用 Android Studio 创建的 Android 项目。我在项目中添加了一些第三方依赖项,但是当我尝试在 Android Studio 中编译时,我遇到了以下错误: Error:Ex
如上所述,如何使用 API 8 获取移动设备网络接口(interface)地址? 最佳答案 NetworkInterface.getInetAddresses() 在 API8 中可用。 关于andr
我想显示 Snackbar并使用图像而不是文本进行操作。 我使用以下代码: val imageSpan = ImageSpan(this, R.drawable.star) val b
我有一个用 python 编写的简单命令行程序。程序使用按以下方式配置的日志记录模块将日志记录到屏幕: logging.basicConfig(level=logging.INFO, format='
使用下面的代码,实现游戏状态以控制关卡的最简单和最简单的方法是什么?如果我想从标题画面开始,然后加载一个关卡,并在完成后进入下一个关卡?如果有人能解释处理这个问题的最简单方法,那就太好了! impor
我想创建一个可以找到嵌套树结构深度的属性。下面的静态通过递归找出深度/级别。但是是否可以将此函数作为同一个类中的属性而不是静态方法? public static int GetDepth(MenuGr
var myArray = [{ title: "Title 1", children: [{ title: "Title 1.1", children: [{
通过下面的代码,实现游戏状态来控制关卡的最简单、最容易的方法是什么?如果我想从标题屏幕开始,然后加载一个关卡,并在完成后进入下一个关卡?如果有人可以解释处理这个问题的最简单方法,那就太好了! impo
我有一个树结构,其中每个节点基本上可以有无限个子节点,它正在为博客的评论建模。 根据特定评论的 ID,我试图找出该评论在树中的深度/级别。 我正在关注 this guide that explains
考虑任何给定的唯一整数的数组,例如[1,3,2,4,6,5] 如何确定“排序度”的级别,范围从 0.0 到 1.0 ? 最佳答案 一种方法是评估必须移动以使其排序的项目数量,然后将其除以项目总数。 作
我如何定义一个模板类,它提供一个整数常量,表示作为输入模板参数提供的(指针)类型的“深度”?例如,如果类名为 Depth,则以下内容为真: Depth::value == 3 Depth::value
我的场景是:文件接收器应该包含所有内容。另一个接收器应包含信息消息,但需要注意的是 Microsoft.* 消息很烦人,因此这些消息应仅限于警告。两个sink怎么单独配置?我尝试的第一件事是: str
我是一名优秀的程序员,十分优秀!