Android:使用LayoutInflater创建

时间:2013-12-17 05:07:30

标签: java android layout

我在使用LayoutInflater创建内容时遇到问题:

package com.tip.calculator;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
public class MainActivity extends Activity implements View.OnClickListener {
    EditText billamount, percent, people;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
        billamount = (EditText)findViewById(R.id.billtext);
        percent = (EditText)findViewById(R.id.percenttext);
        people = (EditText)findViewById(R.id.numberpeople);
        Button unevensplitbutton = (Button)findViewById(R.id.unevensplit);
        Button calculates = (Button)findViewById(R.id.calculate);
        unevensplitbutton.setOnClickListener(this);
        calculates.setOnClickListener(this);
    }

    public void onClick(View v) {
        switch(v.getId()){
            case R.id.calculate:
                TableLayout calculatenumberinflated = (TableLayout)findViewById(R.id.numbertable2);
                View view = getLayoutInflater().inflate(R.layout.calculatenumbertable,calculatenumberinflated,false);
                calculatenumberinflated.addView(view);
                break;
            case R.id.unevensplit:
                break;
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }




}

计算能力的XML:

<?xml version="1.0" encoding="utf-8"?>

<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="25dp"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/numbertable2">
<TableRow
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Each Person Pays"
        android:id="@+id/numberpeople"
        android:layout_column="3" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/eachpersonedit"
        android:layout_column="6" />
</TableRow></TableLayout>

fragment_main的XML:     

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="25dp">

        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Bill amount"
                android:id="@+id/bill"
                android:layout_column="3" />

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="numberDecimal"
                android:ems="10"
                android:id="@+id/billtext"
                android:layout_column="6" />
        </TableRow>

        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Percentage %"
                android:id="@+id/percentage"
                android:layout_column="3" />

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="numberDecimal"
                android:ems="10"
                android:id="@+id/percenttext"
                android:layout_column="6" />
        </TableRow>

        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Number of people"
                android:id="@+id/textView"
                android:layout_column="3" />

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="number"
                android:ems="10"
                android:id="@+id/numberpeople"
                android:layout_column="6" />
        </TableRow>

        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Split Unevenly"
                android:id="@+id/unevensplit"
                android:layout_column="3" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Calculate"
                android:id="@+id/calculate"
                android:layout_column="6" />
        </TableRow>
    </TableLayout>
</ScrollView>

它返回一个错误:

12-16 21:22:56.825  28459-28459/com.tip.calculator E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at com.tip.calculator.MainActivity.onClick(MainActivity.java:35)

第35行是calculatenininflated.addView(view);代码行。

我现在感到迷茫,有人可以澄清我做错了什么吗?感谢。

3 个答案:

答案 0 :(得分:0)

试试这个

LayoutInflater inflater=getLayoutInflater();
View view= inflater.inflate(R.layout.calculatenumbertable, null);
calculatenumberinflated.addView(view);

答案 1 :(得分:0)

将math:id =“@ + id / numbertable2”从calculatenumbertable.xml移到tableLayouts中的fragment_main.xml。

答案 2 :(得分:0)

您在此TableLayout calculatenumberinflated = (TableLayout)findViewById(R.id.numbertable2);布局中找不到此行fragment_main时出现Nullpointer错误。它位于布局calculatenumbertable文件中,当您展开fragment_main布局时,它无法获得TableLayout的正确ID。

尝试在TableRow之外的TableLayout添加您的布局。在calculatenumbertable布局中创建单独的行,然后尝试在该行中添加布局。您无法直接在TableLayout中添加布局。

尝试如下: 在最后的calculatenumbertable添加行中,如下所示:

 <TableRow
        android:id="@+id/tablerow"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

  </TableRow>

onClick添加如下布局:

public void onClick(View v) {
        switch(v.getId()){
            case R.id.calculate:
                TableRowcalculatenumberinflated = (TableRow)findViewById(R.id.tablerow);
                View view = getLayoutInflater().inflate(R.layout.calculatenumbertable,calculatenumberinflated,false);
                calculatenumberinflated.addView(view);
                break;
            case R.id.unevensplit:
                break;
        }
    }