0

現在、私は自分で使用するためのライブラリを開発しています。このライブラリの私のクラスは と呼ばれBaseWindow、私のライブラリ プロジェクトにはSlidingMenuプロジェクトもライブラリとして含まれています。レイアウト フォルダからを取得NullPointerExceptionしようとすると、 が取得されます。listView私のクラスは次のように構築されています:

public class BaseWindow extends SlidingFragmentActivity {

    private String windowTitle; 
    private int menuResourceId;

    /**
     * @param layoutResourceId identificator of the layout to inflate(R.layout.your_layout)
     * @param menuResourceId identification of the menu to inflate(R.layout.your_menu)
     * @param windowTitle title of this window
     */
    public void InitializeWindow(int layoutResourceId, int menuResourceId, String windowTitle)  {

     ...........
     ListView lv = (ListView)findViewById(R.id.menu_listview); 

    }   

}

このようなことはonCreateメソッドで行う必要があることを知っています。しかし、私のように外でそれを行うことは可能ですか? メソッドの上にマウスポインタを置くと、findViewById実際にはスーパークラスのメソッドが参照されます

View com.slidingmenu.lib.app.SlidingFragmentActivity.findViewById(int id)

SlidingFragmentActivityクラス はSherlockFragmentActivity

誰が問題の原因を知っていますか? 私は私のlvオブジェクトです。ヌル?このライブラリ クラスから ListView を正しく取得するにはどうすればよいですか?

4

3 に答える 3

2

menu_listview最初に以下を含む xml をインフレートする必要があります。

LayoutInflater inflater = LayoutInflater.from(context);

View view = inflater.inflate(R.layout.xml_containing_listview);

ListView lv = (ListView) view.findViewById(R.id.menu_listview);

これは単なる概念です。私はこれをテストしていないため、機能しない可能性があります。また、コンテキストが必要です。

于 2013-02-25T08:49:38.097 に答える
1

inのsetContentView()メソッドは、レイアウトを膨らませ、そのビューとリソースをオブジェクトに収集するために使用されるため、重要です。ただし、別のクラスを作成してIDを直接使用してもレイアウトが膨らむことはないため、3つの方法があります。onCreateactivity

1)リストビューを非アクティビティメソッドのメソッドに直接渡します

2)レイアウトを膨らませる

LayoutInflater inflater = LayoutInflater.from(context);
View externalView = inflater.inflate(R.layout.your_layout_containing_listview);
ListView listView = (ListView) externalView .findViewById(R.id.menu_listview);

3)レイアウトを直接膨らませて使用する

LayoutInflater mInflater= (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View externalView = mInflater.inflate(R.layout.your_layout_containing_listview, null);
 ListView listView = (ListView) externalView .findViewById(R.id.menu_listview);

コードに最適なものを選択してください

于 2013-02-25T08:52:42.763 に答える
0

いくつかの理由が考えられます:

  1. InitializeWindow()以前に呼び出されsetContentView()ていますが、Activityにはまだレイアウトがありません。

  2. Idは、Activityによって拡張されたレイアウトmenu_listviewには存在しません。R.layout.***

  3. R間違ったパッケージ(アプリとライブラリ)から参照しています。

于 2013-02-25T08:54:42.597 に答える