0

1 つのアクティビティで 2 つのフラグメントの問題が発生しました。左のフラグメントはリストフラグメントで、右のフラグメントは通常のフラグメントです。フラグメントを結合するための 1 つの laoyut.xml を取得しました。フラグメントごとに 1 つの layout.xml と、リストフラグメントの各行の elayout.xml です。さらに、両方のフラグメントのレイアウトを含むアクティビティを開始するクラスを 1 つ取得しました。1 つのクラスは listfragment 用で、もう 1 つは通常のフラグメント用で、もう 1 つはアダプターです。そして、私は問題を解決する方法がわかりません。コードとエラー ログを投稿する方が簡単だと思います。エラーが作成された位置にマークを付けます。最初に、フラグメントを結合するための私の layout.xml を示します。「manu_pane.xml」と呼ばれます

    <LinearLayout 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:orientation="horizontal" >

<fragment
    android:id="@+id/menu_item_fragment"
    android:name="wak.iage.layout.MenuItemFragment"
    android:layout_width="279dp"
    android:layout_height="match_parent"
/>

<fragment
    android:id="@+id/menu_content_fragment"
    android:name="wak.iage.layout.MenuContentFragment"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1" 
/>

リストフラグメントのlayout.xml ("menu_item_fragment.xml")

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/right_hand_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/tv_status"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/tutorial_headline_bg"
    android:paddingBottom="20dp"
    android:paddingTop="20dp"
    android:text="@string/status_headline"
    android:textColor="@color/tutorial_headline_font"
    android:gravity="center"
    android:textSize="@dimen/fontsize_slogan_titlescreen" />

<ListView
    android:id="@+id/android:list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

「コンテンツ」のlayout.xml(「menu_content_main.xml」)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/titlescreen_bg"
android:orientation="vertical"
android:paddingTop="60dp"
tools:context=".MainActivity" >

    <TextView
        android:id="@+id/tv_headline"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:paddingBottom="60dp"
        android:paddingTop="60dp"
        android:text="@string/slogan"
        android:textSize="@dimen/fontsize_slogan_titlescreen" />
    <TextView
        android:id="@+id/tv_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:paddingBottom="60dp"
        android:paddingTop="60dp"
        android:text="@string/slogan"
        android:textSize="@dimen/fontsize_slogan_titlescreen" />

最後に、各リスト項目の layout.xml ("menu_list_item")

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp">


 <TextView android:id="@+id/menuListItemTitle"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    android:textStyle="bold"
    android:textSize="22dp"
    android:textColor="#000000"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="5dp" 
 />

ここで、2 つのフラグメントを使用してアクティビティを開始する方法を紹介します

    @Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    Intent intent = new Intent(this, MenuActivity.class);
    startActivity(intent);
    return super.onOptionsItemSelected(item);
}

MenuActivity.class は次のようになります。

package wak.iage.layout;

import wak.iage.storage.DataManager;
import wak.iage.storage.DataManager.DataManagerException;
import wak.iage.R;
import android.app.Activity;
import android.os.Bundle;

public class MenuActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.menu_pane);
    bootstrap(); // load all less-data
}

private void bootstrap() {
    DataManager dataManager = new DataManager(this);


    try {
        dataManager.loadStaticData();
    } catch (DataManagerException e) {
        e.printStackTrace();
    }   
}

}

MenuContentFragment.class には「menu_content_main.xml」が含まれており、次のようになります。

package wak.iage.layout;

import wak.iage.R;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;


public class MenuContentFragment extends Fragment {

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.menu_content_main, container);
    return v;
}

public void changeText(String title, String content) {
    TextView head = (TextView) getActivity().findViewById(R.id.tv_headline);
    TextView body = (TextView) getActivity().findViewById(R.id.tv_content);

    body.setText(content);
    head.setTag(title);
}
}

「MenuItemFragment.class」には「menu_list_item.xml」が含まれており、次のようになります。

 package wak.iage.layout;

import java.util.ArrayList;
import wak.iage.R;
import wak.iage.tutorial.MenuItem;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

public class MenuItemFragment extends ListFragment 
{
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    MenuAdapter adapter = (MenuAdapter) this.getListAdapter();
    MenuContentFragment fragment = (MenuContentFragment)    getFragmentManager().findFragmentById(R.id.menu_content_fragment);
    fragment.changeText(adapter.getItem(position).getTitle(), adapter.getItem(position).getContent());
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
        ArrayList<MenuItem> values = new ArrayList<MenuItem>();
        values.add(new MenuItem("Impressum", "hier steht das impressum"));
        values.add(new MenuItem("Hilfe", "hier steht die Hilfe"));
        values.add(new MenuItem("Kontakt", "hier steht der Kontakt"));
        values.add(new MenuItem("Andere Kram", "hier steht krims krams"));

        MenuAdapter adapter = new MenuAdapter(getActivity(), values);
        setListAdapter(adapter);
    }

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

そして最後に「MenuAdapter.class」:

 package wak.iage.layout;

import java.util.ArrayList;

import wak.iage.R;
import wak.iage.tutorial.MenuItem;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class MenuAdapter extends ArrayAdapter<MenuItem> {

public ArrayList<MenuItem> values = null;
private static StatusRowContainer menuItem = null;

public MenuAdapter(Context context, ArrayList<MenuItem> values) {
    super(context, R.layout.menu_list_item);
    this.values = values;
    this.addAll(values);
}

public ArrayList<MenuItem> getMenuItems(){
    return values;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null) {
        LayoutInflater inflater = ((Activity) getContext()) .getLayoutInflater();
        convertView = inflater.inflate(R.layout.menu_list_item, parent, false);

        menuItem = new StatusRowContainer();
//Here is the error!!!
        menuItem.text = (TextView) convertView.findViewById(R.id.tv_headline);
        menuItem.content = (TextView) convertView.findViewById(R.id.tv_content);
        convertView.setTag(menuItem);
    } else {
        menuItem = (StatusRowContainer) convertView.getTag();
    }

    MenuItem menu = values.get(position);
    menuItem.text.setText(menu.getTitle());
    menuItem.content.setText(menu.getContent());

    return convertView;
}

private class StatusRowContainer {
    public TextView content;
    public TextView text;
}
}

そして最後はエラーログです:

02-22 16:53:41.838: E/AndroidRuntime(20746): 致命的な例外: メイン 02-22 16:53:41.838: E/AndroidRuntime(20746): java.lang.NullPointerException 02-22 16:53:41.838: E/AndroidRuntime(20746): wak.iage.layout.MenuAdapter.getView(MenuAdapter.java:47) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.widget.AbsListView.obtainView(AbsListView) .java:2218) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.widget.ListView.measureHeightOfChildren(ListView.java:1244) 02-22 16:53:41.838: E/AndroidRuntime(20746) ): android.widget.ListView.onMeasure(ListView.java:1155) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.view.View.measure(View.java:12929) 02- 22 16:53:41.838: E/AndroidRuntime(20746): android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703) 02-22 16:53:41.838: E/AndroidRuntime(20746):android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.widget.LinearLayout.measureVertical(LinearLayout.java:670) 02-22 16 :53:41.838: E/AndroidRuntime(20746): android.widget.LinearLayout.onMeasure(LinearLayout.java:563) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.view.View で。測定 (View.java:12929) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703) 02-22 16:53:41.838: E/ AndroidRuntime(20746): android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.widget.LinearLayout.measureHorizo​​ntal(LinearLayout.java:1027) ) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.widget で。LinearLayout.onMeasure(LinearLayout.java:565) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.view.View.measure(View.java:12929) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.widget.FrameLayout.onMeasure(FrameLayout.java) :293) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.view.View.measure(View.java:12929) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.widget.LinearLayout.measureVertical(LinearLayout.java:822) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.widget.LinearLayout.onMeasure(LinearLayout.java:563) 02-22 16 :53:41.838: E/AndroidRuntime(20746): android.view.View.measure(View.java:12929) 02-22 16:53:41.838: E/AndroidRuntime(20746):android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 02-22 16 :53:41.838: E/AndroidRuntime(20746): com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2257) 02-22 16:53:41.838: E/AndroidRuntime(20746) : android.view.View.measure(View.java:12929) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1240) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2628) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.os.Handler で.dispatchMessage(Handler.java:99) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.os.Looper.loop(Looper.java:137) 02-22 16:53:41.838: E/AndroidRuntime(20746): android.app.ActivityThread.main(ActivityThread.java:4511) 02-22 16:53:41.838: E/AndroidRuntime(20746): at java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 02-22 16:53:41.838: E/AndroidRuntime(20746): java.lang.reflect.Method.invoke(Method.java:511) 02-22 16 :53:41.838: E/AndroidRuntime(20746): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 02-22 16:53:41.838: E/AndroidRuntime(20746): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 02-22 16:53:41.838: E/AndroidRuntime(20746): dalvik.system.NativeStart.main(ネイティブ メソッド) でinvokeNative(ネイティブ メソッド) 02-22 16:53:41.838: E/AndroidRuntime(20746): java.lang.reflect.Method.invoke(Method.java:511) 02-22 16:53:41.838: E/AndroidRuntime (20746): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 02-22 16:53:41.838: E/AndroidRuntime(20746): com.android.internal.os で。 ZygoteInit.main (ZygoteInit.java:747) 02-22 16:53:41.838: E/AndroidRuntime (20746): dalvik.system.NativeStart.main (ネイティブ メソッド) でinvokeNative(ネイティブ メソッド) 02-22 16:53:41.838: E/AndroidRuntime(20746): java.lang.reflect.Method.invoke(Method.java:511) 02-22 16:53:41.838: E/AndroidRuntime (20746): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 02-22 16:53:41.838: E/AndroidRuntime(20746): com.android.internal.os で。 ZygoteInit.main (ZygoteInit.java:747) 02-22 16:53:41.838: E/AndroidRuntime (20746): dalvik.system.NativeStart.main (ネイティブ メソッド) で747) 02-22 16:53:41.838: E/AndroidRuntime (20746): dalvik.system.NativeStart.main (ネイティブ メソッド) で747) 02-22 16:53:41.838: E/AndroidRuntime (20746): dalvik.system.NativeStart.main (ネイティブ メソッド) で

エラーは、47 行目の「MenuAdapter」にあります (コード行にコメントを書きました)。あなたが私を助けてくれることを願っています。よくわからなかった。

あなたの助けと提案をありがとう!! よろしくj0chn

4

1 に答える 1

0

menu_list_item には tv_headline の ID を持つ textview がないため、menu_list_item の代わりに menu_content_main を膨らませることを意味していると思います。

変更してみてください

convertView = inflater.inflate(R.layout.menu_list_item, parent, false);

convertView = inflater.inflate(R.layout.menu_content_main, parent, false);
于 2013-02-22T16:37:51.563 に答える