为什么我的LinearLayout在更改后没有正确显示?

时间:2018-05-11 21:53:36

标签: java android

我的应用程序有Relative Layout,其中包含scrollViewButtonscrollView内部我主持另一个LinearLayout我的“addPane

我的活动使用while循环将Text Views放在addPane内 在ocassion上我需要重新绘制这个结构,因为BroadcastReceiver收到了一个电话
当我在调试模式中单步执行代码时,我实际上可以看到添加了新的TextView,但我不会在屏幕上看到它。

我已尝试invalidate()我的addPanescrollViewRelativeLayout。 我还尝试requestLayout()所有这些 另外我每次都尝试setContentView,所以它会以一个干净的新布局开始。 以编程方式创建addPane而不是从布局中获取它也不起作用。

以上所有的解决方案都是我能找到的解决方案。

如果我关闭应用程序并重新打开它,TextView就会在那里(我正在从数据库中读取)所以我看到的唯一解释是我错过了刷新布局的东西。

如果有人想要一些代码:

public void setupMatches(){
    SQLiteDatabase Database = openOrCreateDatabase("MatchDatabase",MODE_PRIVATE,null);
    Cursor Query = Database.rawQuery("Select ID, Player1, Player2, Question, Score1, Score2, turn FROM MatchOverview WHERE NOT Question > 11;",null);
    Query.move(-1);
    LinearLayout root = findViewById(R.id.AddFrame);
    root.invalidate();
    root.removeAllViews();
    String enemy ="";
    Log.e("should have elements: ",""+Query.getCount());
    while(Query.moveToNext()){
        TextView Name = new TextView(this);
        if(!Query.getString(1).equals(SetupAndTestConstants.Identity)) {
            //Log.v("menu", "Creating GameButton named " + Query.getInt(0) + " with game ID " + Query.getInt(1));
            enemy = Query.getString(1);
        }else{
            //Log.v("menu", "Creating GameButton named " + Query.getInt(2) + " with game ID " + Query.getInt(1));
            enemy = Query.getString(2);
        }
        Name.setText(getResources().getString(R.string.menuButtonText) + " " + enemy);
        Name.setOnClickListener(new MYonClickListener(Query.getInt(0),enemy,Query.getString(6), this));
        if(Query.getString(6).equals(SetupAndTestConstants.Identity)){
            Name.setBackgroundResource(R.drawable.border_can_play);
        }else{
            Name.setBackgroundResource(R.drawable.border_cant_play);
        }
        root.addView(Name);
    }

    Query.close();
    TextView historyText = new TextView(this);
    historyText.setText(getString(R.string.past));
    historyText.setBackground(getResources().getDrawable(R.drawable.border_can_play));
    historyText.setBackgroundColor(getResources().getColor(R.color.matchBackground));
    root.addView(historyText);

    Cursor Query2 = Database.rawQuery("Select ID, Player1, Player2, Score1, Score2, turn FROM MatchOverview WHERE NOT Question <= 11;",null);
    Query2.move(-1);

    while(Query2.moveToNext()){
        TextView Name = new TextView(this);
        Name.setBackgroundResource(R.drawable.border_neutral);
        if(!Query.getString(1).equals(SetupAndTestConstants.Identity)) {
            //Log.v("menu", "Creating GameButton named " + Query.getInt(0) + " with game ID " + Query.getInt(1));
            enemy = Query.getString(1);
        }else{
            //Log.v("menu", "Creating GameButton named " + Query.getInt(2) + " with game ID " + Query.getInt(1));
            enemy = Query.getString(2);
        }
        Name.setText(R.string.menuButtonText + enemy);
        Name.setOnClickListener(new MYonClickListener(Query2.getInt(0),enemy,"",this));
        root.addView(Name);
    }
    Query2.close();
    Database.close();
    newGame = (Button) findViewById(R.id.bNewGame);
    newGame.setOnClickListener(this);

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_menu"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="that's basically my name so i cut it :D">

    <ScrollView
         android:id="@+id/scroll_view_main"
         android:layout_width="match_parent"
         android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:id="@+id/AddFrame" />
    </ScrollView>

    <Button
        android:textAllCaps="false"
        android:text="@string/newGame"
        android:background="@drawable/rounded_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/bNewGame"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

这是广播接收器:

public class mainBroadcastReceiver extends BroadcastReceiver{

    menu parent;

    public mainBroadcastReceiver(menu parent){
        this.parent = parent;
    }

    public void updateDatabaseFromJson(String table, String db, String data){
        SQLiteDatabase database = openOrCreateDatabase(db,Context.MODE_PRIVATE,null);
        database.beginTransaction();
        for(String json_string : data.split(Pattern.quote("}, "))){
            json_string += "}";
            try {
                JSONObject object = new JSONObject(json_string);
                ContentValues contentValues = new ContentValues();
                Iterator iterator = object.keys();

                while (iterator.hasNext()){
                    String key = (String) iterator.next();
                    contentValues.put(key,String.valueOf(object.get(key)));
                }
                database.insertWithOnConflict(table, null,contentValues,SQLiteDatabase.CONFLICT_REPLACE);

            } catch (JSONException e) {
                e.printStackTrace();
                database.endTransaction();
            }
        }
        database.setTransactionSuccessful();
        database.endTransaction();
        database.close();
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String data = "";
        try {
            data = connection.getData(intent.getAction() + "|" + intent.getStringExtra("params"));
        }catch(IllegalArgumentException e){
            return;
        }
        if(data.equals("")){
            Log.i("main - receiver", "empty response?");
            return;
        }
        switch (intent.getAction()){
            case "QUESTIONSYNC":
                updateDatabaseFromJson("QUESTIONS","QuestionDatabase",data);
                break;

            case "MATCHSYNC":
                updateDatabaseFromJson("MatchOverview","MatchDatabase",data);
                parent.setupMatches();
                break;

            case "CATEGORYSYNC":
                updateDatabaseFromJson("categorys","QuestionDatabase",data);
                break;
        }
    }

0 个答案:

没有答案