[英]Data positioning in a TableLayout - Android Studio
我有两个活动(A和B),活动A要求输入文本(字符串),活动B将字符串存储在表中。 我希望实现的目标:每次向表中添加新字符串时,前一个字符串将向下移动一行,而新字符串将替换旧字符串。 我还希望每次返回活动A时都将表布局保存在活动B中。我将如何实现这一目标?
更新-输入活动
public class MainActivity extends AppCompatActivity {
public static String PREFS_NAME = "prefs";
public static String VALUES_KEY = "vals";
EditText editText;
SharedPreferences prefs;
@Override
protected void onStart() {
super.onStart();
prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
}
private void addValue(Object s) {
prefs.edit()
.putString(VALUES_KEY, String.valueOf(s))
.apply();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_edit_btn);
editText = (EditText) findViewById(R.id.editText);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s = editText.getText().toString();
JSONArray arr = new JSONArray();
// Just for testing
if (s.equals("clear")) {
addValue(arr);
Toast.makeText(MainActivity.this, "prefs cleared", Toast.LENGTH_SHORT).show();
return;
}
String jsonString = prefs.getString(VALUES_KEY, arr.toString());
// Store a JSON array
try {
arr = new JSONArray(jsonString);
arr.put(s);
addValue(arr);
} catch (JSONException e) {
e.printStackTrace();
}
// Go to next activity
startActivity(new Intent(MainActivity.this, TableLayoutActivity.class));
}
});
}
}
第二项活动-有桌子
public class TableLayoutActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tablelayout);
SharedPreferences prefs = getSharedPreferences(MainActivity.PREFS_NAME, MODE_PRIVATE);
TableLayout tl = (TableLayout) findViewById(R.id.table);
// Get the array out of preferences
JSONArray arr = new JSONArray();
String jsonString = prefs.getString(MainActivity.VALUES_KEY, arr.toString());
LayoutInflater inflater = LayoutInflater.from(this);
try {
arr = new JSONArray(jsonString);
// Loop backwards over list, adding rows
for (int i = arr.length() - 1; i >= 0; --i) {
View rowView = inflater.inflate(R.layout.table_row, tl, false);
TextView rowText = (TextView) rowView.findViewById(android.R.id.text1);
rowText.setText( i + ": " + arr.getString(i));
tl.addView(rowView,
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
原始答案
每次我向表中添加新字符串时,前一个字符串将向下移动一行,而新字符串将替换旧字符串
我在您的问题中没有看到TableLayout或TableRow。 有三个常量字符串,但是您想要显示它们的顺序似乎不清楚。
但这是一种方法...您可以将字符串列表存储在SharedPreferences或数据库中,无论如何。 使用TableLayout tl = (TableLayout) findViewById(R.id.tableLayout)
将字符串列表传递给Activity。
从那里,您可以简单地向后循环for (int i = list.size(); i >=0; i--)
,获取String s = list.get(i);
,然后生成一个TableRow tr = new TableRow()
,您将在其中添加一些setText(s)
TextView
。 (或inflate
一些同时包含TextView
和TableRow
XML文件)。
完成TableRow tr
构建后,您可以
tl.addView(tr, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
从而,做我上面引用的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.