Android布局问题:正确获取命名空间

时间:2015-08-17 13:46:22

标签: java android xml

行。我在这些方面看到了很多问题,但我的问题可能是如此基本(即愚蠢的n00b问题),没有人费心去问。

我仍然对Android编程很新,或者在“工业”容量中使用Java(即不适用于简单的10行课堂问题)。

我有一个带有嵌入式静态类的活动类:

package com.example.android.effectivenavigation;
•
•
•
public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
    •
    •
    •
    public static class NonSwipeableViewPager extends ViewPager {
        •
        •
        •
    }
}

这来自该网站的样本。我想要做的是将它减少到最基本的原子元素。

具体来说,我希望将整个示例放在主活动文件中。

这是我的(非功能性)XML:

<com.example.android.effectivenavigation.MainActivity.NonSwipeableViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

现在,问题在于当我在布局XML中指定ViewPager时,在解开NonSwipeableViewPager元素时会出现“ClassNotFoundException”。

如果我在单独的文件中设置NonSwipeableViewPager并直接引用它,它可以正常工作。它是作为静态类嵌入到我遇到的主要活动类中的时候。

我显然在XML中使用了错误的命名空间。

任何人都可以帮我找到正确使用的命名空间吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

尝试在主要活动的xml:

中添加类似内容
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
                               xmlns:tools="http://schemas.android.com/tools"
                               android:id="@+id/pager"
                               android:layout_width="match_parent"
                               android:layout_height="match_parent"
                               tools:context="com.example.android.effectivenavigation.MainActivity.NonSwipeableViewPager"/>

希望这有帮助。

编辑:我还是新用户,我还没有使用我的答案应该有多广泛。所以这里有一个我做过的例子:

您可以在自定义类中扩展Fragment并在其中使用onCreateView方法。此外,对于此片段,您应该有一个单独的布局xml(在我的示例中名为fragment_example)。该方法应返回一个View对象,该对象会扩展片段的布局。这是一个例子:

public static class ExampleFragment extends Fragment {

    static Button b;

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

        b = (Button) rootView.findViewById(R.id.button1);

        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //do something
            }
        });

        return rootView;
    }

}

这是相应的布局xml:

<?xml version="1.0" encoding="utf-8"?>
 <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="fill_parent"
          android:orientation="vertical"
          tools:context=".activity_name">

          <Button
            android:layout_width="227dp"
            android:layout_height="40dp"
            android:text="Search"
            android:id="@+id/search"
            android:layout_gravity="center_horizontal"
            android:background="#80ffffff"
            android:textColor="#ffff6b6b"/>

 </LinearLayout>

您还需要一个FragmentPagerAdapter类来创建片段:

public static class AppSectionsPagerAdapter extends FragmentPagerAdapter {

    public AppSectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        switch (i) {

            default:
                return new ExampleFragment();
        }
    }

    @Override
    public int getCount() {
        return 1;
    }
}

最后在您的活动onCreate方法中,你应该有类似的东西:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Create the adapter that will return a fragment for each of the two primary sections
    // of the app.
    mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager, attaching the adapter and setting up a listener for when the
    // user swipes between sections.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mAppSectionsPagerAdapter);

}

严重依据:http://developer.android.com/training/implementing-navigation/lateral.html

我希望这可以提供更多细节,并帮助您更多