片段中间体(II)中的片段Dynmically添加行,机器人 [英] Fragment Intermediate (II):Dynmically adding row in a fragment, Android

查看:201
本文介绍了片段中间体(II)中的片段Dynmically添加行,机器人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在行片段动态添加到表中。
不过,我面临的一些运行时错误,严重需要一些建议。

logcat的:

1) E / AndroidRuntime(1038):了java.lang.RuntimeException:无法启动活动ComponentInfo {} com.example.lol/com.example.lol.MainActivity:android.view.InflateException :二进制XML文件行#96:错误充气类片段

2) E / AndroidRuntime(1038):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)

3) E / AndroidRuntime(1038):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)

FragmentTwo.Java

 进口android.app.Fragment;
进口android.os.Bundle;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.view.ViewGroup.LayoutParams;
进口android.widget.EditText;
进口android.widget.TableLayout;
进口android.widget.TableRow;
进口android.widget.TextView;公共类FragmentTwo扩展片段{    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState)
    {
        查看查看= inflater.inflate(R.layout.fragment_two,集装箱,FALSE);        TableLayout TL =(TableLayout)getActivity()findViewById(R.id.mainLayout)。
        TR的TableRow =新的TableRow(getActivity()getApplicationContext());
// tr.setLayoutParams(新的LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
        TextView的textview1 =新的TextView(getActivity()getApplicationContext());
        textview1.setText(不高兴);
        tr.addView(textview1);        TextView的textview2 =新的TextView(getActivity()getApplicationContext());
        textview2.setText(快乐);
        tr.addView(textview2);
        tl.addView(TR,新TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));        返回视图。
    }

MainActivity.java

 公共类MainActivity延伸活动{    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
    }    公共无效selectFrag(查看视图){
        片段FR;
        如果(查看== findViewById(R.id.button2)){
            FR =新FragmentTwo();        }其他{
            FR =新FragmentOne();
        }
        FragmentManager FM = getFragmentManager();
        FragmentTransaction fragmentTransaction = fm.beginTransaction();
        fragmentTransaction.replace(R.id.fragment_place,FR);
        fragmentTransaction.commit();   }}

fragment_two.xml

 <?XML版本=1.0编码=UTF-8&GT?;<的LinearLayout
   的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
   机器人:layout_width =match_parent
   机器人:layout_height =match_parent
   机器人:方向=垂直
   机器人:背景=#FFFF00>
        < TableLayout
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =FILL_PARENT
        机器人:ID =@ + ID / mainLayout>        <的TableRow
                机器人:ID =@ + ID / infoRow
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT>                <的TextView
                        机器人:文字=不幸
                        机器人:ID =@ + ID /列1
                        机器人:layout_width =WRAP_CONTENT
                        机器人:layout_height =WRAP_CONTENT>
                < / TextView的>                <的TextView
                        机器人:文字=快乐
                        机器人:ID =@ + ID /列2
                        机器人:layout_width =WRAP_CONTENT
                        机器人:layout_height =WRAP_CONTENT>
                < / TextView的>
        < /&的TableRow GT;
< / TableLayout>
< / LinearLayout中>


解决方案

更改此

  TableLayout TL =(TableLayout)getActivity()findViewById(R.id.mainLayout)。

  TableLayout TL =(TableLayout)view.findViewById(R.id.mainLayout);

这是一个错误,避免了 NullPointerException异常

和使用 getActivity()初始化意见。要知道为什么读

<一个href=\"http://stackoverflow.com/questions/7298731/when-to-call-activity-context-or-application-context\">When调用活动上下文或应用程序上下文?

I am trying to dynamically add rows to a table in the fragment. However, I am facing some run-time error and seriously in need of some advice.

Logcat:

1)E/AndroidRuntime(1038): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lol/com.example.lol.MainActivity}: android.view.InflateException: Binary XML file line #96: Error inflating class fragment

2)E/AndroidRuntime(1038): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)

3)E/AndroidRuntime(1038):at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2084)

FragmentTwo.Java

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class FragmentTwo extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) 
    {
        View view = inflater.inflate(R.layout.fragment_two, container, false);

        TableLayout tl=(TableLayout) getActivity().findViewById(R.id.mainLayout);


        TableRow tr = new TableRow(getActivity().getApplicationContext());
//        tr.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));


        TextView textview1 = new TextView(getActivity().getApplicationContext());
        textview1.setText("unhappy");
        tr.addView(textview1);

        TextView textview2 = new TextView(getActivity().getApplicationContext());
        textview2.setText("happy");
        tr.addView(textview2);


        tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

        return view;
    }

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void selectFrag(View view) {
        Fragment fr;    
        if(view == findViewById(R.id.button2)) {
            fr = new FragmentTwo();

        }else {
            fr = new FragmentOne();
        }
        FragmentManager fm = getFragmentManager();
        FragmentTransaction fragmentTransaction = fm.beginTransaction();
        fragmentTransaction.replace(R.id.fragment_place, fr);
        fragmentTransaction.commit();

   }

}

fragment_two.xml

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

<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
   android:background="#ffff00">


        <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/mainLayout">

        <TableRow
                android:id="@+id/infoRow"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <TextView
                        android:text="Unhappy"
                        android:id="@+id/column1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content">
                </TextView>

                <TextView
                        android:text="Happy"
                        android:id="@+id/column2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content">
                </TextView>


        </TableRow>
</TableLayout>
</LinearLayout>

解决方案

Change this

TableLayout tl=(TableLayout) getActivity().findViewById(R.id.mainLayout);

to

TableLayout tl=(TableLayout) view.findViewById(R.id.mainLayout);

This is one mistake which avoids NullPointerException.

And use getActivity() to initialize views. To know why read

When to call activity context OR application context?

这篇关于片段中间体(II)中的片段Dynmically添加行,机器人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆