Android中的动态水平滚动视图

时间:2011-12-29 07:13:41

标签: android horizontal-scrolling horizontalscrollview

我想要这个:我正在构建一些屏幕,我会遇到像

这样的问题
1.The capital of India is
a. Delhi
b. Bangalore
c. Chennai

2. Are you sure?
a. Yes
b. No

现在我想要的是在一个屏幕上我想要问题1,并且在滑动(水平滚动)时我应该看到问题2.并且选项必须是单选按钮。作为一个Android noob,我知道我必须使用Horizo​​ntal scroll,但我可能在sqlite文件中有100个这样的问题:我该如何动态地执行此操作?一旦我调用了活动,就必须从文件中读取100个问题,我应该有100个这样的可滚动屏幕。帮助,我无法在Android开发者网站或此处找到这方面的内容。

2 个答案:

答案 0 :(得分:1)

如上所述,最好的选择是收听滑动手势并替换视图中的数据。 即,您不需要为每个问题创建多个视图。 这是我会做的: 创建一个xml或多或少的视图(请注意我跳过包括layoutheight和layoutwidth等mandetory属性,你需要在xml中使用它们)

<LinearLayout
  android:orientation="vertical">
   <TextView
      android:id="+@id/questiontext"/>
   <RadioGroup
      android:id="+@/answersgroup"/>
</LinearLayout>

现在参加活动:

  1. 实现触摸侦听器并编写代码以检测滑动。 (上面的回答由ali.chousein包含了完美的链接,以获得如何获得的良好参考。)
  2. 在初始加载时,将第一个问题设置为视图:

    QandA_CustomDataObject dataItem = questionArr.get(0);
    ((TextView)findViewById(R.id.questiontext)).setText(dataItem.question);
    int answearrsize = dataItem.answers.size();
    RadioGroup rg = ((RadioGroup)findViewById(R.id.answersgroup));
    for(int i=0;i<answearrsize;i++) //Dynamically create the radio buttons
    {
        AnswerObj ao = dataItem.get(0).answers.get(i);
        RadioButton rb = new RadioButton(this);
        rb.setText(ao.text);
        rb.setTag(ao.isCorrectAnswer); //A string saying TRUE or FALSE
        rg.addView(rb);
    }
    
  3. 现在在您执行右侧滑动或左侧滑动的手势验证后的代码部分

    //Lets say you ++ or -- a variable named currentQuestionNumber based on the swipe direction)
    QandA_CustomDataObject dataItem = questionArr.get(currentQuestionNumber);
    ((TextView)findViewById(R.id.questiontext)).setText(dataItem.question);
    int answearrsize = dataItem.answers.size();
    RadioGroup rg = ((RadioGroup)findViewById(R.id.answersgroup));
    rg.removeAllViews(); //Clears away the last questions answer options
    for(int i=0;i<answearrsize;i++) //Dynamically create the radio buttons
    {
        AnswerObj ao = dataItem.get(0).answers.get(i);
        RadioButton rb = new RadioButton(this);
        rb.setText(ao.text);
        rb.setTag(ao.isCorrectAnswer); //A string saying TRUE or FALSE
        rg.addView(rb);
    }         
    
  4. 现在有几种替代方法可以做到这一点。使用适配器,列表视图等。 我对所有的数据结构类进行了任意命名,但我希望你明白这一点......它更像是一种处理从一个问题转移到另一个问题的方法,使用我希望指出的相同的活动(屏幕)。

答案 1 :(得分:0)

为什么不检测滑动手势并更改活动内容,而不是水平视图?您可以找到许多关于检测滑动手势的指针。其中之一是:Fling gesture detection on grid layout