我遇到了相對佈局有點問題。我正在做一個項目,我必須從.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上,並把鏈接放在這裏。抱歉給你帶來不便。
爲什麼不使用帶適配器的列表? –
對不起,但請您詳細說明一下嗎? – pratnala
對不起,我沒有正確理解你的問題。不要介意我說的話。 –