繁体   English   中英

TableLayout中的数据定位-Android Studio

[英]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一些同时包含TextViewTableRow 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM