为什么findViewById在android-section-list中返回null

时间:2013-09-27 10:27:14

标签: android inheritance layout android-activity classloader

Here is the original code

我在src root中创建了一个testing包,最后是SectionListActivityExtended

是一个简单的别名,但在不同的包中:

package testing;

import pl.polidea.sectionedlist.SectionListActivity;

public class SectionListActivityExtended extends SectionListActivity{

}

修改了AndroidManifest.xml部分:

   <activity
        android:name="testing.SectionListActivityExtended"
        android:label="@string/app_name"
        android:theme="@style/SectionListViewTheme" >

并修改了SectionListActivity:

@Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        arrayAdapter = new StandardArrayAdapter(this, R.id.example_text_view, exampleArray);
        sectionAdapter = new SectionListAdapter(getLayoutInflater(), arrayAdapter);
        String className = SectionListActivity.class.getPackage().getName();//className: pl.polidea.sectionedlist
        System.out.println("className: "+className);//className: pl.polidea.sectionedlist
        listView = (SectionListView) findViewById(getResources().getIdentifier("section_list_view", "id", className));
        listView.setAdapter(sectionAdapter);
    }

经过测试并正在使用,它用类名标签写出包名,现在不重要了。

我已经创建了我的工作应用程序(在NDA下有很多样式和定义)我已经将包含所需文件的源代码复制到我的项目中,希望我能开始工作。修改了SectionListActivity并从扩展类调用,类似于上面:不同的根包。

    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        arrayAdapter = new StandardArrayAdapter(this, R.id.example_text_view, exampleArray);
        sectionAdapter = new SectionListAdapter(getLayoutInflater(), arrayAdapter);

//      FrameLayout frameLayout = (FrameLayout) findViewById(R.id.listView);
//      if (frameLayout == null) {
//          Log.e("tag", "got frameLayout");
//      } else {
//
//          Log.e("tag", "frameLayout is NULL");
//      }

        String packageName = SectionListActivity.class.getPackage().getName();//pl.polidea.sectionedlist
        System.out.println("packageName: " + packageName);
        listView = (SectionListView) findViewById(getResources().getIdentifier("section_list_view", "id", packageName));
        if (listView != null) {
            listView.setAdapter(sectionAdapter);
        } else {
            Log.e(packageName, "Can't load section_list_view ");
        }
    }

frameLayoutlistView都为空。

来自其他帖子的主要原因是因为他们没有将attrs传递给super,但是这部分代码没有被触及:

public SectionListView(final Context context, final AttributeSet attrs) {
    super(context, attrs);
    commonInitialisation();
}

也许在造型方面,它并没有合并,但不知道如何追踪,或者我可能会错过一些东西而且还不知道。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这样做

listView = (SectionListView) findViewById(getResources().getIdentifier("section_list_view", "id", getPackageName()));