0

findViewById(R.id.team_detail_container)ビューが見つかりません。問題は xml にありますか、それとも FragmentActivity を構築する方法にありますか? これを解決するにはどうすればよいですか?

フラグメントアクティビティのコンストラクターでフラグメントのカスタマイズされたリストをサポートするために、置き換えました

setContentView(R.layout.activity_team_list);

frag=(TeamListFragment)getSupportFragmentManager().findFragmentById(android.R.id.content);
        if (frag==null) {
            frag=new TeamListFragment();
            getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();

私のクラスは今このように見えるように

public class TeamListActivity extends SherlockFragmentActivity implements
        TeamListFragment.Callbacks {

    private boolean mTwoPane;
    private TeamListFragment frag=null;

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

        frag=(TeamListFragment)getSupportFragmentManager().findFragmentById(android.R.id.content);
        if (frag==null) {
            frag=new TeamListFragment();
            getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
        }
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        if (findViewById(R.id.team_detail_container) != null) {

            Log.i("@@@@", "Team Detail Container has been found! Yaay!");
            mTwoPane = true;
            ((TeamListFragment) getSupportFragmentManager().findFragmentById(
                    R.id.team_list)).setActivateOnItemClick(true);
        }   
    }

if (findViewById(R.id.team_detail_container) != null) {使用されるxmlファイルにteam_detail_containerが存在するにもかかわらず、条件が満たされることはありません

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/team_list_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:orientation="horizontal"
        android:showDividers="middle"
        tools:context=".TeamListActivity" >

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/team_list"
                android:orientation="vertical"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:paddingLeft="8dp"
                android:paddingRight="8dp">

            <ListView
                android:id="@android:id/list"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:drawSelectorOnTop="false" />

            <TextView android:id="@id/android:empty"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent"
                      android:text="No data"/>
         </LinearLayout>        
        <View
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            android:background="?android:attr/listDivider"
        /> 

        <FrameLayout
            android:id="@+id/team_detail_container"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="3" />

    </LinearLayout>

xml ファイルに加えた変更がアプリに反映されるため、この特定のレイアウト xml が使用されていることはわかっています。また、ログメッセージが表示されないため、条件が満たされないこともわかっていますLog.i("@@@@", "Team Detail Container has been found! Yaay!");。動作は、項目が選択されたときに、リストビューの横に表示される詳細フラグメントではなく、リストビューが詳細フラグメントに置き換えられることです。アイテムの選択条件が満たされていない

@Override
public void onItemSelected(int id) {
    if (mTwoPane) {
                // mTwoPane is never set! Why?

        Bundle arguments = new Bundle();
        arguments.putInt(TeamDetailFragment.ARG_ITEM_ID, id);
        TeamDetailFragment fragment = new TeamDetailFragment();
        fragment.setArguments(arguments);
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.team_detail_container, fragment).commit();

    } else {
        // In single-pane mode, simply start the detail activity
        // for the selected item ID.
        Intent detailIntent = new Intent(this, TeamDetailSwipeActivity.class);
        detailIntent.putExtra(TeamDetailFragment.ARG_ITEM_ID, id);
        startActivity(detailIntent);
    }
}
4

2 に答える 2

1

フラグメントは、トランザクションをコミットした直後にレイアウト ツリーに追加されません。onViewCreatedフラグメントが呼び出されるまで待つ必要があります。onStartアクティビティの -Method内でビューにアクセスすることもできますが、そのロジックをフラグメント自体に保持することをお勧めします。アクティビティは、フラグメントに含まれるビューを気にする必要はありません。

于 2013-01-24T15:31:22.587 に答える
1

問題は、アクティビティからフラグメントを探していることだと思いますが、を使用してsetContentViewいないため、アクティビティには実際に調べるビューがありません。getView()メソッドを使用する代わりに、フラグメントからビューを取得してみてください。

于 2013-01-24T15:09:34.630 に答える