Как динамически добавить представление карты в макет сетки - PullRequest
1 голос
/ 30 мая 2020

Я пытаюсь динамически добавить cardview в GridLayout. Но это не добавление cardview.

Иерархия - это ScrollView -> HorizontalScrollView -> LinearLayout -> GridLayout, и я хочу добавить к этому макету сетки. мой код:

public class MainActivity extends AppCompatActivity {
GridLayout gridLayout;
TextView tc;
CardView newc;
@SuppressLint("SetTextI18n")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    gridLayout = findViewById(R.id.gridlayout);

   newc = new CardView(getApplicationContext());
   newc.setLayoutParams(new CardView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
   newc.setRadius(8);
   newc.setCardElevation(10);
   tc = new TextView(getApplicationContext());
   tc.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
   tc.setText("This is dynamic");
   newc.addView(tc);
   GridLayout.Spec row = GridLayout.spec(0);
   GridLayout.Spec col = GridLayout.spec(0);
   GridLayout.LayoutParams gridP = new GridLayout.LayoutParams(row, col);
   gridLayout.addView(newc, gridP);

}
}

Итак, как динамически добавлять представления в GridLayout.

Спасибо.

1 Ответ

0 голосов
/ 30 мая 2020

В вашем коде есть некоторые ошибки ... используйте это

newc = new CardView(getApplicationContext());
newc.setLayoutParams(new CardView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
newc.setRadius(8);
 newc.setCardElevation(10);
tc = new TextView(getApplicationContext());
tc.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
tc.setText("This is dynamic");
newc.addView(tc);
gridLayout.setColumnCount(2);
gridLayout.setOrientation(GridLayout.HORIZONTAL);
gridLayout.addView(newc);

Если вы хотите добавить представление в строку spcifi c и указать столбец c, используйте это

 GridLayout.Spec row = GridLayout.spec(0); // Mention row index here
   GridLayout.Spec col = GridLayout.spec(0);// Mention column index here
   GridLayout.LayoutParams gridP = new GridLayout.LayoutParams(row, col);

В вашем случае вы всегда используете 0,0 для строки и столбца, поэтому в основном происходит то, что представления добавляются в макет сетки, но они перекрываются, и, следовательно, вы не можете их видеть

...