2016-05-05 7 views
0

質問:既存の相対的なレイアウトに複数の相対的なレイアウトを追加する方法。私はアンドロイドDEVを学習し、自己の過程ではまだだとして追加する複数のレイアウトプログラム

は自分の無知を許してください、私の理解では、いくつかのギャップが残っています。

私の目標は、この画面を取ることです:Main Activityそして、複数のより小さい相対レイアウトを線形レイアウトに追加します。この場合、レイアウトの名前はrootWorkingLayoutです。現在、私のコードはここに表示されているように、より小さい相対レイアウトの1つを正常に追加します: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> 

そして、ここで私は複数追加しようとしています相対的なレイアウトのレイアウトであります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の問題か、どこかで宣言する必要があるという問題です。おそらく私は、プロセスを経る最終的に何らかのループを構築する必要があると思っている。しかし、現時点では、複数のpreviewPlateレイアウトを追加する方法を理解する助けが必要だと思います。

ありがとうございます!

+0

のようにそれを行うことができます。一般に、ビューにIDが必要な唯一の理由は、後で 'findViewById'を使って見つけることができるためです。 –

+0

この問題を解決した後の私の次のステップは、個々に追加されたレイアウト内のテキストに影響を及ぼすことです。なぜそれぞれのIDを設定しようとしていたのですか? – VanDroid

+0

私は、あなたが望むことを行うための「適切な」方法は、LinearLayoutの代わりにListViewを使用し、ビューを動的にロードするArrayAdapterを使用することだと思います。 –

答えて

0

は今現在、私のコードが正常に小さな相対レイアウト

確かに、あなただけのonCreateに一度あなたのメソッドを呼び出すためにそれがあるの1を追加します。

newPreview(previewReceiver); 

この行を複数回コピーすると、複数のレイアウトが表示されます。 TextViews内

マイ一見とらえどころのない目標は、画面上でこれらの4または5を持っているさまざまなデータを持つ各

あなたは、それぞれの時間はあなたが別のデータを設定するために、あなたのメソッドを呼び出して別のバンドルが必要になりますしかし、あなたがする必要があるのは、そのメソッドをもう一度呼び出すことだけです。

そして、あなたがツールバーでそのプラスボタンでそれをやろうとしている場合、あなたはあなたがそれを追加する前のビューにIDを設定する必要はありませんので、

@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

関連する問題