Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android上使用屏幕片段_Android_Android Fragments - Fatal编程技术网

在android上使用屏幕片段

在android上使用屏幕片段,android,android-fragments,Android,Android Fragments,我正在开发android应用程序,并试图让碎片正常工作,但我遇到了一个问题 当应用程序启动时,它会加载一个活动,该活动应该包含这两个片段。Fragment1包含存储的登录名列表,Fragment2将显示与该登录名相关的详细信息 列表片段应该从SQLite数据库中检索数据并显示在屏幕上,单击该项后,它将加载第二个片段,但我在第一阶段工作时遇到问题 在我的主要活动课上,我有以下几点 public class PasswordListMain extends Activity { publi

我正在开发android应用程序,并试图让碎片正常工作,但我遇到了一个问题

当应用程序启动时,它会加载一个活动,该活动应该包含这两个片段。Fragment1包含存储的登录名列表,Fragment2将显示与该登录名相关的详细信息

列表片段应该从SQLite数据库中检索数据并显示在屏幕上,单击该项后,它将加载第二个片段,但我在第一阶段工作时遇到问题

在我的主要活动课上,我有以下几点

public class PasswordListMain extends Activity {

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

}
密码管理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" >

    <fragment
        android:id="@+id/passwordList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.BoardiesITSolutions.PasswordManager.PasswordListFrag">
    </fragment>
</LinearLayout>
public class PasswordListFrag extends ListFragment{

    Common common; 
    com.BoardiesITSolutions.logic.ManagePasswordList managePasswordList;

    ArrayList<String> savedPassword;
    TextView txtNoRecords;
    ListView myListView;
    ArrayAdapter<Spanned> passwordArrayAdapter;
    AdView adView;

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

        myListView = getListView();
        common = new Common(getActivity().getApplicationContext());

        //AdView adView = (AdView)findViewById(R.id.adView);
        common.requestAdvert(adView);

        managePasswordList = new ManagePasswordList(getActivity().getApplicationContext());
        //txtNoRecords = (TextView)findViewById(R.id.password_noRecords);
        populateListArray();

        common.showToastMessage("Adapter updated", Toast.LENGTH_LONG);

        //myListView.setOnItemClickListener(mListView);

        return view;
    }

    private void populateListArray()
    {

        ArrayList<Spanned> passwords = managePasswordList.getPasswordList();
        if (passwords != null && passwords.size() > 0)
        {
            passwordArrayAdapter = new ArrayAdapter<Spanned>(getActivity().getApplicationContext(), 
                    android.R.layout.simple_list_item_1, passwords);
            setListAdapter(passwordArrayAdapter);
            passwordArrayAdapter.setNotifyOnChange(true);
            myListView.setTextFilterEnabled(true);
            txtNoRecords.setVisibility(View.GONE);
        }
        else
        {
            txtNoRecords.setVisibility(View.VISIBLE);
        }
    }
}

它只是包含了片段,因为这是一个肖像屏幕,我想我应该先让它工作,然后再让它并排工作

PasswordListFrag包含以下内容

<?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" >

    <fragment
        android:id="@+id/passwordList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.BoardiesITSolutions.PasswordManager.PasswordListFrag">
    </fragment>
</LinearLayout>
public class PasswordListFrag extends ListFragment{

    Common common; 
    com.BoardiesITSolutions.logic.ManagePasswordList managePasswordList;

    ArrayList<String> savedPassword;
    TextView txtNoRecords;
    ListView myListView;
    ArrayAdapter<Spanned> passwordArrayAdapter;
    AdView adView;

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

        myListView = getListView();
        common = new Common(getActivity().getApplicationContext());

        //AdView adView = (AdView)findViewById(R.id.adView);
        common.requestAdvert(adView);

        managePasswordList = new ManagePasswordList(getActivity().getApplicationContext());
        //txtNoRecords = (TextView)findViewById(R.id.password_noRecords);
        populateListArray();

        common.showToastMessage("Adapter updated", Toast.LENGTH_LONG);

        //myListView.setOnItemClickListener(mListView);

        return view;
    }

    private void populateListArray()
    {

        ArrayList<Spanned> passwords = managePasswordList.getPasswordList();
        if (passwords != null && passwords.size() > 0)
        {
            passwordArrayAdapter = new ArrayAdapter<Spanned>(getActivity().getApplicationContext(), 
                    android.R.layout.simple_list_item_1, passwords);
            setListAdapter(passwordArrayAdapter);
            passwordArrayAdapter.setNotifyOnChange(true);
            myListView.setTextFilterEnabled(true);
            txtNoRecords.setVisibility(View.GONE);
        }
        else
        {
            txtNoRecords.setVisibility(View.VISIBLE);
        }
    }
}
公共类密码ListFrag扩展ListFragment{
共同的;
com.BoardiesITSolutions.logic.ManagePasswordList ManagePasswordList;
arraylistsavedpassword;
TextView txtNoRecords;
列表视图;
ArrayAdapter密码ArrayAdapter;
AdView AdView;
@凌驾
创建视图上的公共视图(布局充气机、视图组容器、捆绑包保存状态)
{
视图=充气机。充气(R.layout.password\u列表,容器,false);
myListView=getListView();
公共=新公共(getActivity().getApplicationContext());
//AdView AdView=(AdView)findViewById(R.id.AdView);
common.requestAdvert(adView);
managePasswordList=新的managePasswordList(getActivity().getApplicationContext());
//txtNoRecords=(TextView)findViewById(R.id.password\u noRecords);
人口统计法();
common.showToastMessage(“适配器更新”,Toast.LENGTH\u LONG);
//myListView.setOnItemClickListener(mListView);
返回视图;
}
私有void populateListArray()
{
ArrayList passwords=managePasswordList.getPasswordList();
if(passwords!=null&&passwords.size()>0)
{
passwordArrayAdapter=新的ArrayAdapter(getActivity().getApplicationContext(),
android.R.layout.simple_list_item_1,密码);
setListAdapter(passwordArrayAdapter);
passwordArrayAdapter.setNotifyOnChange(true);
myListView.setTextFilterEnabled(true);
txtNoRecords.setVisibility(View.GONE);
}
其他的
{
txtNoRecords.setVisibility(View.VISIBLE);
}
}
}
下面是列表片段的XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView android:id="@+id/password_noRecords"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_gravity="center"
        android:text="There are currently\nno saved logins"
        android:textSize="20dp"
        android:textStyle="bold|italic"/>
    <ListView 
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/adView">
    </ListView>
        <com.google.ads.AdView android:id="@+id/adView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            ads:adUnitId="5555555"
            ads:adSize="BANNER"
            android:layout_alignParentBottom="true">
        </com.google.ads.AdView>
</RelativeLayout>

当应用程序加载时,当它尝试加载此屏幕时会立即崩溃

错误是

java.lang.RuntimeException:无法启动活动组件信息
PasswordListMain:android.view.InflatException:Binary-XML文件行
#7膨胀类片段时出错

我不知道是什么导致了这个问题,也不知道如何解决这个问题


谢谢你能提供的帮助

我对这个问题的最佳猜测是这句话(但我不确定):


你在片段有一个视图之前调用它-我认为这不会太好。我建议您对
onActivityCreated()
中涉及的视图进行初始化,而不是
onCreateView()
onCreate()中的其他组件(如数据存储和
Common

我假设xml声明的fragment元素中的类路径不正确。我已经仔细检查了,但似乎没有问题。ListFragments要求Listview具有id“@android:id/list”,是这样吗?是的,我添加了xml文件,抱歉,我以为我添加了,但是它确实有
@android:id/list
。是的,这是一个很好的答案,onCreateView()应该只用于创建视图,在onActivityCreated()中完成您的工作谢谢您的编写,完成了这项工作,并且似乎正在工作,刚刚开始让第二个片段工作:)