Мне удалось разобраться с этим, установив переменную int для Position и вызвав ее в классе MainActivity внутри запущенного таймера. Пожалуйста, смотрите код ниже.
public class MainActivity extends AppCompatActivity {
CountDownTimer questionTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStart = (Button) findViewById(R.id.start);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setQuestions();
timer();
}
});
}//End of create()
public void timer() {
questionTimer = new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
timer = (TextView) findViewById(R.id.timer);
timer.setText("Seconds Remaining: " + millisUntilFinished / 1000);
if (adapter.getEndQuiz() == 5) {
questionTimer.cancel();
}
}
public void onFinish() {
timer.setText("Done!");
}
}.start();
}
public void setQuestions() {
ArrayList<Questions> qArrList = new ArrayList<>();
for (int i = 0; i < 5; i++) {
ques = new Questions();
ques.setQuestion("");
qArrList.add(ques);
}
adapter = new AdapterListView(getBaseContext(), R.layout.item_listview, qArrList);
questListView.setAdapter(adapter);
}
}//End of Class
Адаптер
public class AdapterListView extends ArrayAdapter<Questions> {
Context mContext;
LayoutInflater inflater;
private ArrayList<Questions> questionsArrayList;
private Questions quesObject;
private ArrayList<String> quesList = new ArrayList<String>();
private int a, b, ab, c, d, cd, e, f, ef, g, h, gh, i, j, ij;
private ArrayList<Integer> answersList = new ArrayList<Integer>();
private int endQuiz = 0;
public AdapterListView(Context context, int resource, ArrayList<Questions> questionsArrayList) {
super(context, resource);
this.mContext = context;
this.setQuestionsArrayList(questionsArrayList);
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_listview, null);
holder = new ViewHolder();
holder.questionTextView = convertView.findViewById(R.id.question);
holder.editText = convertView.findViewById(R.id.ans_edit_text);
holder.imgTrue = convertView.findViewById(R.id.ans_true);
holder.imgFalse = convertView.findViewById(R.id.ans_false);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
quesObject = getQuestionsArrayList().get(position);
int count = 0;
if (position == 0) count = 1;
else if (position == 1) count = 2;
else if (position == 2) count = 3;
else if (position == 3) count = 4;
else if (position == 4) count = 5;
Random rand = new Random();
a = (rand.nextInt(15) + 1);
b = (rand.nextInt(10) + 1);
ab = a + b;
c = (rand.nextInt(15) + 1);
d = (rand.nextInt(10) + 1);
cd = c + d;
e = (rand.nextInt(15) + 1);
f = (rand.nextInt(10) + 1);
ef = e + f;
g = (rand.nextInt(15) + 1);
h = (rand.nextInt(10) + 1);
gh = g + h;
i = (rand.nextInt(15) + 1);
j = (rand.nextInt(10) + 10);
ij = i + j;
quesList.add(a + " + " + b);
quesList.add(c + " + " + d);
quesList.add(e + " + " + f);
quesList.add(g + " + " + h);
quesList.add(i + " + " + j);
getAnswersList().add(ab);
getAnswersList().add(cd);
getAnswersList().add(ef);
getAnswersList().add(gh);
getAnswersList().add(ij);
holder.questionTextView.setText("Q " + count + ": \t" + quesList.get(position));
holder.editText.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
if (holder.editText.getText().toString().trim().length() > 0) {
int inputNum = Integer.parseInt(String.valueOf(holder.editText.getText().toString().trim()));
if (getAnswersList().get(position) != inputNum) {
holder.imgFalse.setVisibility(View.VISIBLE);
holder.imgTrue.setVisibility(View.GONE);
} else {
holder.imgTrue.setVisibility(View.VISIBLE);
holder.imgFalse.setVisibility(View.GONE);
}
if(position == 0) setEndQuiz(1);
else if(position == 1) setEndQuiz(2);
else if(position == 2) setEndQuiz(3);
else if(position == 3) setEndQuiz(4);
else if(position == 4) setEndQuiz(5);
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
});
return convertView;
}
@Override
public int getCount() {
return getQuestionsArrayList().size();
}
static class ViewHolder {
TextView questionTextView;
EditText editText;
ImageView imgTrue, imgFalse;
}
}
Ссылки C++ намеренно не определяются в стандарте, который будет реализован с помощью указателей. Ссылка больше похожа на "синоним" к переменной, чем указатель на него. Эта семантика открывает некоторую возможную оптимизацию для компилятора, когда возможно понять, что указатель был бы излишеством в некоторых ситуациях.
еще Несколько различий:
Игнорирование каждого синтаксического сахара и возможностей, которые могут быть сделаны с тем а не с другим и различием между указателями и ссылками, объясненными в других ответах (к другим вопросам)... Да те два являются функционально точно тем же! Оба вызывают функцию и обе виртуальных функции дескриптора одинаково хорошо.
И не, Ваша строка не режет. Это просто связывает ссылку непосредственно на объект, на который указывает указатель.
Некоторые вопросы на том, почему Вы хотели бы использовать один по другому:
Вместо того, чтобы пытаться придумать различия самостоятельно, я делегирую Вас тем в случае, если Вы хотите знать.
Ссылка является постоянным указателем, т.е. Вы не можете изменить ссылку для обращения к другому объекту. Если Вы изменяетесь, значение относящихся объектных изменений.
Для Исключая:
int j = 10;
int &i = j;
int l = 20;
i = l; // Now value of j = 20
int *k = &j;
k = &l; // Value of j is still 10
Я не использовал C++ в долгое время, таким образом, я даже не собираюсь пытаться действительно ответить на Ваш вопрос (извините); Однако Eric Lippert просто отправил превосходная статья об указателях/ссылках, что я полагал, что укажу на Вас на.
Да они функционально идентичны. Так как ссылка потребует, чтобы Вы установили его на объект перед использованием его, Вы, привычка должна иметь дело с нулевыми указателями или указателями на недопустимую память.
также важно видеть семантическое различие:
Не уверенный, если кто-либо ответил на Ваш 2-й вопрос, скрытый внизу о разрезании... не, которое не вызовет разрезание.
Разрезание состоит в том, когда производный объект присвоен (скопированный) в объект базового класса - специализация производного класса "нарезана" прочь. Обратите внимание, что я сказал , объект копируется, мы не говорим об указателе том, чтобы быть, копировал/присваивал, но сами объекты.
В Вашем примере, этого не происходит. Вы просто разыменовываете указатель на объект Панели (таким образом, приводящий к объекту Панели) используемый в качестве rvalue в ссылочной инициализации. Не уверенный я разобрался в своей терминологии...
Как все остальные упомянули в ссылках реализации, и указатели являются в основном тем же. Существуют некоторые незначительные протесты:
Вы не можете присвоить ПУСТОЙ УКАЗАТЕЛЬ ссылке (shoosh, упомянул это): это значительно, так как нет никакого "неопределенного" или "недопустимого" ссылочного значения.
можно передать временную переменную как константа ссылка, но не законно передать указатель на временный файл.
, Например, это хорошо:
class Thingy; // assume a constructor Thingy(int,int)
void foo(const Thingy &a)
{
a.DoSomething();
}
void bar( )
{
foo( Thingy(1,2) );
}
, но большинство компиляторов будет жаловаться приблизительно [1 114]
void foo2( Thingy * a);
void bar2()
{
foo( &Thingy(1,2) );
}
void foo()
{
int a = 5;
// this may be slightly more efficient
int &b = a;
printf( "%d", ++b );
// than this
int *c = &a;
printf( "%d", ++(*c) );
}
Точно так же __ ограничивают ключевое слово , не может быть применен к ссылкам, только указатели.
Вы не можете сделать адресной арифметики с указателями со ссылками, поэтому тогда как, если у Вас есть указатель в массив тогда, следующий элемент в массиве может иметься через p+1, ссылка только когда-либо указывает на одну вещь в своей всей жизни.
Функции являются, очевидно, не "тем же", но относительно виртуального поведения они будут вести себя так же. Относительно разрезания это только происходит, когда Вы имеете дело withvalues, не ссылки или указатели.