当前位置: 首页 > 知识库问答 >
问题:

在 Android FragmentActivity with ListFragment 中找不到 id 的视图

郦磊
2023-03-14

我正在尝试创建一个自定义ListView。当我测试我的代码时,我收到以下错误

03-09 19:21:10.425: E/AndroidRuntime(379): java.lang.RuntimeException: Unable to start      activity ComponentInfo{com.anomaly.punchlist/com.anomaly.punchlist.TeamActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f08000c for fragment TeamListFragment{4067a358 #0 id=0x7f08000c}

在发布此问题之前,除了阅读有关 Fragments,ListFragments和ListViews的Android文档外,我还参考了以下链接。

链接1:fragmentation activity onCreateView < br >链接2:在Android上使用ListFragment的问题< br >链接3: Android Fragment没有找到id的视图?< br >链接4: Android ListFragment是为了混淆< br >链接5:如何从FragmentActivity更新ListFragment中的ListView?< br >链接6:用自定义视图填充ListFragments?

我有类TeamActive,它扩展FragmentActive和TeamListFraenge,它扩展ListFraenge和实现LoaderManager.LoaderCallbacks.请参阅下面的代码:

TeamActivity.java

package com.anomaly.punchlist;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

public class TeamActivity extends FragmentActivity {

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

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction =  fragmentManager.beginTransaction();
    TeamListFragment teamListFragment = new TeamListFragment();
    fragmentTransaction.add(R.id.android_teamList, teamListFragment);
    fragmentTransaction.commit();       
   }

 }

TeamListFragment.java

package com.anomaly.punchlist;

    import android.database.Cursor;
    import android.os.Bundle;
    import android.support.v4.app.ListFragment;
    import android.support.v4.app.LoaderManager;
    import android.support.v4.content.CursorLoader;
    import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import com.anomaly.punchlist.contentprovider.basecolumns.TeamBaseColumns.Team;
import com.j256.ormlite.logger.Logger;
import com.j256.ormlite.logger.LoggerFactory;

public class TeamListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {

    private static Logger logger = LoggerFactory.getLogger(TeamListFragment.class);
    private ListView listView;
    private SimpleCursorAdapter adapter;
    private static final int TEAM_LOADER_ACTIVITY = 0x01;
    private static final String[] PROJECTION = new String[] { "project_manager_id", "contact_id", "project_id" };
    private static String SELECTION = "contact_id = ? AND project_id = ?";

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

    @Override
    public void onCreate(Bundle savedInstanceState) {
        try {
            super.onCreate(savedInstanceState);
            int[] uiBindTo = { R.id.text1 };
            getLoaderManager().initLoader(TEAM_LOADER_ACTIVITY, null, this);
            adapter = new SimpleCursorAdapter(getActivity().getApplicationContext(), R.layout.team, null, null, uiBindTo, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

        } catch (Exception e) {
            logger.error(e.getMessage());
            new RuntimeException("RuntimeException occurred in onCreate() method of TeamActivity." + e);
        }
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
    }

    @Override
    public Loader<Cursor> onCreateLoader(int arg0, Bundle bundle) {

        String contactId = new String();
        String projectId = new String();
        CursorLoader cursorLoader = null;

        if (bundle != null) {
            contactId = bundle.getString("contact_id");
            projectId = bundle.getString("project_id");

        }
        String[] selectionArgs = { contactId + ", " + projectId };
        cursorLoader = new CursorLoader(getActivity(), Team.CONTENT_URI, PROJECTION, SELECTION, null, null);
        return cursorLoader;
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
        adapter.swapCursor(cursor);
        setListShown(true);

    }

    @Override
    public void onLoaderReset(Loader<Cursor> cursor) {
        adapter.swapCursor(null);
    }

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

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        listView = getListView();
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        setListAdapter(adapter);
        setListShown(true);
    }

}

除了上面的代码,我还有以下自定义布局。

team.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"
    android:paddingLeft="8dp"
    android:paddingRight="8dp" >


    <ListView
        android:id="@+id/android:teamList"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@color/grey2"
        android:divider="@color/blue2"
        android:dividerHeight="1dp"
        android:drawSelectorOnTop="false" />

    <TextView
        android:id="@id/android:empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000"
        android:text="No data" />
</LinearLayout>

共有2个答案

况庆
2023-03-14

R.id.text1应该在R.layout.team中定义。

检查SimpleCursorAdapter文档:

定义此列表项视图的布局文件的资源标识符。布局文件应至少包括“到”中定义的命名视图

薛华奥
2023-03-14

在活动的onCreate()方法中,使用方法setContentView(R.layout.Activity),并定义一个布局文件,其中包含LinearLayout内部的框架布局。

现在,使用刚才添加的FrameLayout的id调用< code>add()方法,而不是在< code>onCreate()中使用的< code > r . id . Android _ team list ,并且在team.xml布局文件中使用< code > Android:id = " @ id/Android:team list " 替换< code > Android:id = " @ Android:id/list " 。

顺便说一下,如果必须,您可以使用android.R.id.list访问ListView。

 类似资料:
  • 我开始建立一个简单的Android应用程序,所以当我按下我的视频按钮时,它会调用一个包含视频播放器的片段,但我总是得到:没有找到id 0x7F090005的视图... 我想知道你能不能帮我找出我正在编写的代码中有什么错误。 下面是我的mainactivity.java文件: 那么我有我的main_activity.xml: 非常感谢事先的帮助。 EGMWeb

  • 我一整天都被困在这个问题上,我似乎找不到一个适合我的情况的答案,足以让我使用。 当我单击一个列表项时,比如Blue,在Portraint中,我希望它显示一个新的片段,这是一个蓝色的屏幕,而在Sandwork中,它在半个屏幕上显示该片段,在另一个屏幕上显示listview。我正在使用ActionBarSherlock和碎片来完成这一点。 我从里到外构建了它,所以我从一个列表开始,它按照我想要的方式工

  • 我正试图按照本教程将thymeleaf添加到springboot应用程序中,但我似乎无法让它工作。辅导的:http://spr.com/part-2-adding-views-using-thymeleaf-and-jsp-if-you-want/ 当我在LoginController中使用@RestController启动应用程序时,我能够让springstart正常工作,但是当我将@RestC

  • 问题内容: 我在Eclipse中打开了一个项目,但是发现我无法通过单击 Window- > Show View_切换到包浏览器。在“ _显示视图” 下 显示 的菜单中,我只是找不到项目“ Package Explorer”。可能是什么问题呢? 问题答案: 并非所有视图都直接在每个透视图中列出…选择:

  • 我刚开始学Android。我有一个活动类,我想把它重定向到导航栏的ViewPage中的一个片段?我尝试了很多方法,但都不奏效。我希望能帮上忙!!!我的代码:有一个mainactivity.java有一个ViewPager和BottomNavigationView ViewPageApdater类 和Activity类,但我遇到一个问题:java.lang.IllegalArgumentExcept