2012-06-10 23 views
0

我遇到了相對佈局有點問題。我正在做一個項目,我必須從.CSV文件中讀取一些值,並在相對佈局中動態顯示它們。我會放幾個代碼片段和圖片,然後解釋我的問題。向android相對佈局動態添加元素

第一個代碼段:

package ekalavya.pratnala.quiz; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.util.StringTokenizer; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.ScrollView; 

public class QuizActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Beginning of variable declarations 
    File quizSpecs = new File("mnt/sdcard/teacher.csv"); // Read the file 
    BufferedReader csvReader = null; 
    String line = ""; // Storing each line in a string 
    StringTokenizer currentLine = null; 
    int noOfQuestions = 0; // Number of questions in the quiz 
    int time = 0; // Duration of the quiz 
    int[][] quizData; // Storing the quiz specifications in an integer array 
    int i = 0, j = 0; // Loop variables 
    int[][] questionImages = { 
      { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, 
        R.drawable.e, R.drawable.f, R.drawable.g, R.drawable.h, 
        R.drawable.i, R.drawable.j }, 
      { R.drawable.a_checked, R.drawable.b_checked, 
        R.drawable.c_checked, R.drawable.d_checked, 
        R.drawable.e_checked, R.drawable.f_checked, 
        R.drawable.g_checked, R.drawable.h_checked, 
        R.drawable.i_checked, R.drawable.j_checked }, 
      { R.drawable.zero, R.drawable.one, R.drawable.two, 
        R.drawable.three, R.drawable.four, R.drawable.five, 
        R.drawable.six, R.drawable.seven, R.drawable.eight, 
        R.drawable.nine }, 
      { R.drawable.zero_checked, R.drawable.one_checked, 
        R.drawable.two_checked, R.drawable.three_checked, 
        R.drawable.four_checked, R.drawable.five_checked, 
        R.drawable.six_checked, R.drawable.seven_checked, 
        R.drawable.eight_checked, R.drawable.nine_checked } }; 
    // End of variable declarations 

    try { 
     csvReader = new BufferedReader(new FileReader(quizSpecs)); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     line = csvReader.readLine(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    currentLine = new StringTokenizer(line, ","); 
    noOfQuestions = Integer.parseInt(currentLine.nextToken()); 
    time = Integer.parseInt(currentLine.nextToken()); 
    while (currentLine.hasMoreTokens()) 
     ; 
    quizData = new int[noOfQuestions][6]; 
    for (i = 0; i < noOfQuestions; i++) { 
     try { 
      line = csvReader.readLine(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     currentLine = new StringTokenizer(line, ","); 
     for (j = 0; j < 6; j++) { 
      quizData[i][j] = Integer.parseInt(currentLine.nextToken()); 
     } 
    } 
    try { 
     csvReader.close(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    ScrollView s1 = new ScrollView(this); 
    RelativeLayout r1 = new RelativeLayout(this); 
    for (i = 0; i < 2; i++) { 
     switch (quizData[i][1]) { 
     case 1: 
     case 2: 
      for (j = 0; j < quizData[i][2]; j++) { 
       ImageView option = new ImageView(this); 
       option.setImageResource(questionImages[0][j]); 
       option.setId(j + (10 * (i + 1))); 
       RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
         RelativeLayout.LayoutParams.WRAP_CONTENT, 
         RelativeLayout.LayoutParams.WRAP_CONTENT); 
       params.addRule(RelativeLayout.RIGHT_OF, j - 1 
         + (10 * (i + 1))); 
       option.setLayoutParams(params); 
       r1.addView(option, params); 
      } 
      break; 
     } 
    } 
    s1.addView(r1, new LayoutParams(LayoutParams.FILL_PARENT, 
      LayoutParams.FILL_PARENT)); 
    this.setContentView(s1); 
} 
} 

圖片1:https://www.dropbox.com/s/vzpilyotvgtipbb/pic2.png

第二代碼片段:

package ekalavya.pratnala.quiz; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.util.StringTokenizer; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.ScrollView; 

public class QuizActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Beginning of variable declarations 
    File quizSpecs = new File("mnt/sdcard/teacher.csv"); // Read the file 
    BufferedReader csvReader = null; 
    String line = ""; // Storing each line in a string 
    StringTokenizer currentLine = null; 
    int noOfQuestions = 0; // Number of questions in the quiz 
    int time = 0; // Duration of the quiz 
    int[][] quizData; // Storing the quiz specifications in an integer array 
    int i = 0, j = 0; // Loop variables 
    int[][] questionImages = { 
      { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, 
        R.drawable.e, R.drawable.f, R.drawable.g, R.drawable.h, 
        R.drawable.i, R.drawable.j }, 
      { R.drawable.a_checked, R.drawable.b_checked, 
        R.drawable.c_checked, R.drawable.d_checked, 
        R.drawable.e_checked, R.drawable.f_checked, 
        R.drawable.g_checked, R.drawable.h_checked, 
        R.drawable.i_checked, R.drawable.j_checked }, 
      { R.drawable.zero, R.drawable.one, R.drawable.two, 
        R.drawable.three, R.drawable.four, R.drawable.five, 
        R.drawable.six, R.drawable.seven, R.drawable.eight, 
        R.drawable.nine }, 
      { R.drawable.zero_checked, R.drawable.one_checked, 
        R.drawable.two_checked, R.drawable.three_checked, 
        R.drawable.four_checked, R.drawable.five_checked, 
        R.drawable.six_checked, R.drawable.seven_checked, 
        R.drawable.eight_checked, R.drawable.nine_checked } }; 
    // End of variable declarations 

    try { 
     csvReader = new BufferedReader(new FileReader(quizSpecs)); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     line = csvReader.readLine(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    currentLine = new StringTokenizer(line, ","); 
    noOfQuestions = Integer.parseInt(currentLine.nextToken()); 
    time = Integer.parseInt(currentLine.nextToken()); 
    while (currentLine.hasMoreTokens()) 
     ; 
    quizData = new int[noOfQuestions][6]; 
    for (i = 0; i < noOfQuestions; i++) { 
     try { 
      line = csvReader.readLine(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     currentLine = new StringTokenizer(line, ","); 
     for (j = 0; j < 6; j++) { 
      quizData[i][j] = Integer.parseInt(currentLine.nextToken()); 
     } 
    } 
    try { 
     csvReader.close(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    ScrollView s1 = new ScrollView(this); 
    RelativeLayout r1 = new RelativeLayout(this); 
    for (i = 0; i < 1; i++) { 
     switch (quizData[i][3]) { 
     case 1: 
     case 2: 
      for (j = 0; j < quizData[i][2]; j++) { 
       ImageView option = new ImageView(this); 
       option.setImageResource(questionImages[0][j]); 
       option.setId(j + (10 * (i + 1))); 
       RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
         RelativeLayout.LayoutParams.WRAP_CONTENT, 
         RelativeLayout.LayoutParams.WRAP_CONTENT); 
       params.addRule(RelativeLayout.RIGHT_OF, j - 1 
         + (10 * (i + 1))); 
       option.setLayoutParams(params); 
       r1.addView(option, params); 
      } 
      break; 
     } 
    } 
    s1.addView(r1, new LayoutParams(LayoutParams.FILL_PARENT, 
      LayoutParams.FILL_PARENT)); 
    this.setContentView(s1); 
} 
} 

圖2:https://www.dropbox.com/s/itazcpshjzbza4t/pic1.png

當環路在開關殼體與變量'我'只運行一次,秒ond輸出。如果我運行兩次,第一個輸出會出現。但那不是我想要的。我想要第一個輸出行顯示在第二個輸出行的下面。我知道代碼中有些問題,但我不知道如何糾正它。請幫幫我!另外,我想知道如何將這些元素放置在屏幕上的任何位置。

P.S.我沒有被允許上傳圖片,因爲我的聲望低於10(我在這裏是新手)。所以,我把它們放在Dropbox上,並把鏈接放在這裏。抱歉給你帶來不便。

+0

爲什麼不使用帶適配器的列表? –

+0

對不起,但請您詳細說明一下嗎? – pratnala

+0

對不起,我沒有正確理解你的問題。不要介意我說的話。 –

回答

1

我已經解決了這個問題:我之前只指定了RIGHT_OF屬性,因此它不知道垂直放置的位置,因此放在頂部。指定BELOW屬性也解決了問題。

+0

我之前只指定了RIGHT_OF屬性,因此它不知道垂直放置的位置,因此將它放在頂部。通過指定BELOW屬性,我解決了它。我可以收到upvote嗎?需要一些代表在未來的問題中包含圖像。 – pratnala