- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
ViewPager代码:
public class CrimePagerActivity extends AppCompatActivity {
private static final String EXTRA_CRIME_ID =
"com.bignerdranch.android.criminalintent.crime_id";
private static ViewPager mViewPager;
public static List<Crime> mCrimes;
public static int indexPager;
private Button startButton;
private Button finishButton;
public static Intent newIntent(Context packageContext, UUID crimeId) {
Intent intent = new Intent(packageContext, CrimePagerActivity.class);
intent.putExtra(EXTRA_CRIME_ID, crimeId);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_crime_pager);
UUID crimeId = (UUID) getIntent()
.getSerializableExtra(EXTRA_CRIME_ID);
mViewPager = (ViewPager) findViewById(R.id.crime_view_pager);
mViewPager.setClipToPadding(false);
mViewPager.setPadding(20, 0, 20, 0);
mViewPager.setPageMargin(20);
mCrimes = CrimeLab.get(this).getCrimes();
FragmentManager fragmentManager = getSupportFragmentManager();
mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {
@Override
public Fragment getItem(int position) { // !!!
Crime crime = mCrimes.get(position);
indexPager = position;
return CrimeFragment.newInstance(crime.getId());
}
@Override
public int getCount() {
return mCrimes.size(); //!!!!!!!!
}
});
for (int i = 0; i < mCrimes.size(); i++) {
if (mCrimes.get(i).getId().equals(crimeId)) {
mViewPager.setCurrentItem(i);
indexPager = i;
break;
}
}
}
public static void razmeshcheniyePager(int a){
mViewPager.setCurrentItem(a);
}
}
和 fragment 代码:
public class CrimeFragment extends Fragment {
private static final String ARG_CRIME_ID = "crime_id";
private Crime mCrime;
private EditText mTitleField;
private Button mDateButton;
private CheckBox mSolvedCheckBox;
private Button startButton;
private Button finishButton;
private CrimePagerActivity mPagerActivity;
public static CrimeFragment newInstance(UUID crimeId) {
Bundle args = new Bundle();
args.putSerializable(ARG_CRIME_ID, crimeId);
CrimeFragment fragment = new CrimeFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
UUID crimeId = (UUID) getArguments().getSerializable(ARG_CRIME_ID);
mCrime = CrimeLab.get(getActivity()).getCrime(crimeId);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_crime, container, false); // уточнить, что происходит здесь
mTitleField = (EditText) v.findViewById(R.id.crime_title);
startButton = (Button) v.findViewById(R.id.start_button);
if(CrimePagerActivity.indexPager == 2) startButton.setEnabled(false);
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPagerActivity.razmeshcheniyePager(0);
}
});
finishButton = (Button) v.findViewById(R.id.fifsh_button);
if (CrimePagerActivity.indexPager == CrimePagerActivity.mCrimes.size()-3) finishButton.setEnabled(false);
finishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPagerActivity.razmeshcheniyePager(CrimePagerActivity.mCrimes.size()-1);
}
});
mTitleField.setText(mCrime.getTitle());
mTitleField.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mCrime.setTitle(s.toString()); // возвращает строку, которая используется для задания заголовка Crime
}
@Override
public void afterTextChanged(Editable s) {
}
});
mDateButton = (Button) v.findViewById(R.id.crime_date); // кнопка во фрагменте создаётся немного не так, как в активности
mDateButton.setText(mCrime.getDate().toString()); // вывод даты на кнопке
mDateButton.setEnabled(false); // блокироание возможности нажатия кнопки
mSolvedCheckBox = (CheckBox)v.findViewById(R.id.crime_solved);
mSolvedCheckBox.setChecked(mCrime.isSolved()); // метод setChecked меняет булеву значение булевой переменной на противоположное
mSolvedCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mCrime.setSolved(isChecked);
}
});
return v;
}
}
我需要阻止按钮移动到列表的开头或结尾,以防用户已经位于列表的开头或结尾。为此,我尝试通过静态变量传递元素的位置。问题是元素的位置没有正确传输(即当应该传输数字0时,传输2,当应该传输99时,传输97)。即使您在 fragment 的代码中考虑到这一点,按钮锁仍然无法正常工作(按钮甚至可能被位于附近的几个元素阻止)。我尝试使用调试来查找问题,但遇到了另一个晦涩的功能。该代码在锁定按钮之前可以依次调用多次(也可能根本不调用)。匿名类new FragmentStatePagerAdapter(位于CrimePagerActivity Activity 中)中的一些方法的代码可以被调用大量次。请解释发生了什么以及如何处理。
附注示例代码取自《Android 编程:大 Nerd 牧场指南》(第 3 版)一书(Big Nerd Ranch Guides)。比尔·菲利普斯、克里斯·斯图尔特、克里斯汀·马西卡诺。第11章
最佳答案
您正在 getItem()
中设置 indexPager
。这是不正确的。 getItem()
可以出于任何原因随时调用,并且不一定反射(reflect)当前查看或选择的项目。您需要找到另一种方法来设置当前“选定”的项目。
请参阅documentation for FragmentStatePagerAdapter
。该文档中有一个很好的示例说明了如何执行此操作。
关于java - 我无法通过 ViewPager 正确地将项目编号传递给 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60991578/
我使用 Faker gem 来播种某些数据。我怎样才能设置最大。假公司名称的长度,如何设置假号码的范围? name = Faker::Company.name 这里我想包括最大长度,因为名称对最大长
我试图实现一种方法,在该方法中我创建一个记分板(while 循环)并按某个数字字段(点)对获取的结果进行排序。但我需要实现的是如下 rank----username--point 1st------t
如何在 ListView (vsReport) 中对项目进行编号?现在我有类似的东西: Item := ListView1.Items.Add; Item.Caption :=inttostr(Ite
我正在尝试使用几个按钮在红色和绿色之间切换,我已经浏览了 Jquery 文档,但我似乎无法弄清楚这个。 您可以在我的代码片段中看到,当我单击按钮时,所有按钮都会变成不同的颜色。 而且必须有一种更短的方
是否可以在 GROUP_CONCAT 中进行编号 喜欢 如果,来自 GROUP_CONCAT(empnam SEPARATOR ', ') 我有一套, 我需要 我试过跟随,但没有得到想要的结
在 Linux 中,如何使用用户指定的事件编号创建输入事件接口(interface)并将其映射到特定的设备事件? 我正在使用 gpio-keys 驱动程序来翻译键盘上的按键操作。我定义了要在我的板配置
对于低级应用程序,我在编译时将某种索引定义为一种类型: template class Idx{ using TYPE = T_; static const int IDX = IDX_; }
请问如何设置这种格式的编号: 1) number 1 2) number 2 3) ... 在 HTML 中? 我只找到了一种获取这种格式的方法: 1. number 1 2. number 2 3.
对于我的研究,我需要很少的数据,其中之一是前一次提交的 SHA 编号,即如果我提供特定的提交编号/SHA 编号,我应该能够获得它之前的 SHA 编号。 帮我用 git 命令来获得相同的结果。 最佳答案
我需要询问何时按下数字 1 键,而不是在数字键盘上,而是在 Q 上方的数字 1(试图使这尽可能清楚)。 我已经浏览了 Keys 数组上所有可用的键,但没有一个匹配我正在寻找的键。 有没有办法做到这一点
我正在尝试使用 NAnt 任务设置构建服务器。我有几个想要构建的 Git 存储库,但我在结果的版本控制方面遇到了问题。 如何对库 (dll) 进行版本控制,以便每个构建都使用一个数字来表示每个版本?我
我有一个如下所示的表格: +-------+--------+--------+ | Grp | Party | Member | +-------+--------+--------+ | F
我正在使用 SQL Server 2008。我在查询中返回了这些数据,看起来非常像按 Day 和 ManualOrder 排序的... ID Day ManualOrder Lat L
区域:Silverlight 中的文本框 问题:我需要知道当前编辑的是什么“行号”。 我试过:作为一种解决方法,我尝试使用 textBox.Split("\r") 进行拆分,并计算 Regex 上具有
提前致歉,我不确定如何将 null 值添加到 pandas 数据框,所以我在列表中放置了“无”。我有一个具有以下值的数据框: None, None, 50,60,70,80,90,None,None,
我的应用程序中有一个标签,其中会带有徽章编号,该标签基于3个不同时间发生的3种不同操作。我知道如何使用以下方式设置标签栏标志: [[[[[self tabBarController] tabBar]
有谁知道为什么我们的供应商需要我们的 sku 编号来开发新应用程序? 我们自己将应用程序带入应用程序商店,也许我错了,但构建应用程序或将其上传到商店不需要 sku - 它仅在 iTunes 中连接而不
这个问题已经有答案了: Rationale for Matcher throwing IllegalStateException when no 'matching' method is called
我使用[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]清除徽章编号。它工作正常,但同时删除了远程通知。 还有许多其
我有一个待办事项列表应用程序,我想在图标徽章中显示未完成任务的数量。 我的问题是:我是否应该在用户每次在应用程序中删除/添加新任务时更新徽章编号,还是仅在应用程序即将进入后台模式时更新徽章编号? 最佳
我是一名优秀的程序员,十分优秀!