2016-05-05 2 views
0

Вопрос: Как добавить несколько относительных макетов к существующей относительной компоновке.Добавление нескольких макетов Программно

Прошу простить мое невежество, поскольку я все еще в процессе самообучения Android-разработчика и все еще есть несколько пробелов в моем понимании.

Моя цель - снять этот экран: Main Activity и добавить несколько меньших относительных макетов к линейной компоновке, в этом случае этот макет называется rootWorkingLayout. В настоящее время мой код успешно добавляет один из меньших сравнительных макетов, как показано здесь: Main Activity.

Моя, казалось бы, неуловимая цель состоит в том, чтобы иметь 4 или 5 из них на экране с разными данными в TextViews (Но это следующий шаг для меня). Я не уверен, как это сделать.

Основная деятельность Java Класс:

public class rootActivity extends AppCompatActivity { 

private Toolbar toolbar; //Toolbar Declaration 
public LinearLayout rootWorkingLayout; 
public static int i = 100; //previewCounter 
//Main Function 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_root); 
    toolbar =(Toolbar) findViewById(R.id.toolBar); 
    rootWorkingLayout = (LinearLayout) findViewById(R.id.rootWorkingLayout); 
    setSupportActionBar(toolbar); 
    Bundle previewReceiver = getIntent().getExtras(); 
    //If There is a Bundle, Process it 
    if(previewReceiver != null) { 
     newPreview(previewReceiver); 
    } 
} 
//Create Options Menu 
@Override 
public boolean onCreateOptionsMenu (Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 
//Track Options Menu 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_newReport: return true; 
     case R.id.action_history: return true; 
     case R.id.action_settings: return true; 
     default: return super.onOptionsItemSelected(item); 
    } 
} 
//Launch New Report Wizard 
public void newReport (MenuItem menuItem) 
{ 
    Intent startNewReport = new Intent(getApplicationContext(), reportGeneratorActivity.class); 
    startActivity(startNewReport);//Go To Report Wizard 
} 
//Process New Preview 
public void newPreview (Bundle previewReceiver) { 
    //Extract Strings from Bundle 
    String date = previewReceiver.getString("date"); 
    String client = previewReceiver.getString("client"); 
    String machine =previewReceiver.getString("machine"); 
    String serialNum = previewReceiver.getString("serial"); 
    //Create New Inflater 
    LayoutInflater previewInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View previewLayout = previewInflater.inflate(R.layout.previewplate, null); 
    //Set Params 
    LinearLayout.LayoutParams previewParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
    previewLayout.setLayoutParams(previewParams);// Add Params to Preview Plate 
    //Add previewLayout to rootWorkingLayout 
    previewLayout.setId(i); 
    //previewLayout.setID(i);//Assing new ID 
    i += 100;//Increment ID 
    rootWorkingLayout.addView(previewLayout); 
    //TODO: Configure Preview Plate 
} 

}

Вот Основная деятельность XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
tools:context="com.gdt.user.testgdt.rootActivity"> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolBar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/colorPrimary" 
    android:elevation="4dp"/> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentBottom="true" 
    android:layout_alignStart="@+id/toolBar" 
    android:layout_below="@+id/toolBar" 
    android:id="@+id/rootWorkingLayout" 
    android:paddingTop="10dp" 
    android:weightSum="1"> 

</LinearLayout> 
</RelativeLayout> 

А вот Компоновка Relative Layout Я пытаю добавить несколько раз к rootWorkingLayout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:id="@+id/previewReportPlate" 
android:background="#D1D1D1" 
android:layout_below="@+id/previewReportPlateLbl" 
android:layout_alignParentStart="true"> 
<TextView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textAppearance="?android:attr/textAppearanceMedium" 
android:text="Client Name" 
android:id="@+id/clientNamePlate" 
android:textColor="#000000" 
android:paddingLeft="6dp" 
android:paddingTop="6dp" 
android:paddingRight="6dp" 
android:paddingBottom="6dp" 
android:layout_alignParentLeft="true" 
android:layout_marginLeft="0dp" 
android:layout_alignParentTop="true" 
android:layout_marginTop="0dp" /> 
<TextView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textAppearance="?android:attr/textAppearanceLarge" 
android:text="Machine Type" 
android:id="@+id/machineTypePlate" 
android:textColor="#000000" 
android:paddingLeft="6dp" 
android:paddingTop="6dp" 
android:paddingRight="6dp" 
android:paddingBottom="6dp" 
android:layout_marginLeft="0dp" 
android:layout_below="@+id/clientNamePlate" 
android:layout_alignParentStart="true" /> 
<TextView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textAppearance="?android:attr/textAppearanceLarge" 
android:text="Serial Number" 
android:id="@+id/serialNumberPlate" 
android:textColor="#000000" 
android:paddingLeft="6dp" 
android:paddingTop="6dp" 
android:paddingRight="6dp" 
android:paddingBottom="6dp" 
android:layout_marginLeft="0dp" 
android:layout_below="@+id/machineTypePlate" /> 
<TextView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textAppearance="?android:attr/textAppearanceSmall" 
android:text="Date" 
android:id="@+id/datePlate" 
android:layout_gravity="right" 
android:textColor="#000000" 
android:paddingRight="10dp" 
android:layout_marginLeft="691dp" 
android:layout_below="@+id/serialNumberPlate" 
android:layout_alignParentEnd="true" /> 
</RelativeLayout> 

Мои текущие мысли состоят в том, что это проблема с previewLayout.setId или правило, которое мне нужно объявить где-то. Вероятно, я верю, что мне нужно построить какой-то цикл, который в конечном итоге пройдет через этот процесс. Но в это время я думаю, мне нужна помощь в выяснении того, как добавить несколько макетов предварительного просмотра.

Заранее благодарен!

+0

Вам не нужно, чтобы установить идентификатор к виду, прежде чем добавить его. Как правило, единственная причина, по которой представление нуждается в идентификаторе, заключается в том, что вы можете найти его с помощью 'findViewById'. –

+0

Мой следующий шаг после того, как я решил эту проблему, должен начать влиять на текст внутри индивидуально добавленных макетов, поэтому почему я пытался установить идентификатор для каждого, но я считаю, что делаю это неправильно. – VanDroid

+0

Я думаю, что «правильный» способ сделать то, что вам нужно, - это ListView вместо LinearLayout и ArrayAdapter для динамического загрузки представлений. –

ответ

0

Сейчас в данный момент, мой код успешно добавляет один из меньших относительных макетов

Конечно, это потому, что вы только вызов методы один раз в onCreate.

newPreview(previewReceiver); 

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

Моя, казалось бы, недостижимой цель состоит в том, чтобы иметь 4 или 5 из них на экране с разными данными в пределах TextViews

Вам необходимы различные Связки каждый раз, когда вы называете свой метод, чтобы задать разные данные, но все, что вам нужно сделать, это снова вызвать этот метод.

И если вы пытаетесь это сделать с этой кнопкой плюс на панели инструментов, вы можете сделать это так

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_newReport: 
      Bundle b = new Bundle(); 
      // TODO: set some data in the bundle 
      newPreview(b); 
      return true; 
+0

Я думаю, что я слежу. Событие, которое запускает функцию newPreview, происходит из другого действия, насколько я понимаю. В другой деятельности у меня есть кнопка, при нажатии она создает намерение, создает набор, привязывает его к намерению, а затем отправляет его обратно в главную активность, где добавляется новый макет. Нажатие кнопки «плюс» на панели инструментов приводит пользователя к другому действию, в котором они могут повторить этот процесс, и в идеале добавить еще один макет с разной информацией, поскольку моя цель - позволить пользователю иметь разные превью-таблицы для каждого использования. – VanDroid

+0

Итак, ваше намерение приходит из другого действия, но 'onCreate' (и, следовательно, ваш метод) вызывается только один раз, поэтому я не уверен, как вы хотите справиться с этим –

+0

Хм, поэтому, если я понимаю, мне нужно либо у вас есть какой-то слушатель, настроенный отдельно в пределах Основной активности, чтобы вызвать newPreview, или мне нужно правильно запустить метод из другого действия? – VanDroid

Смежные вопросы