2013-11-25 30 views
1

是Android的工作室測試索姆的東西,跑了這個錯誤:沒有查看發現ID 0x7f070053

FATAL EXCEPTION: main Process: com.meisolsson.app, PID: 25610 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.meisolsson.app/com.meisolsson.app.LoginActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f070053 (com.meisolsson.app:id/container) for fragment PlaceholderFragment{4284e750 #0 id=0x7f070053}

這裏是我的LoginActivity.java

package com.meisolsson.app; 

import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.ActionBar; 
import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.os.Build; 
import android.view.Window; 
import android.widget.Button; 

public class LoginActivity extends ActionBarActivity { 

private Button loginButton; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_login); 

    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()) 
       .commit(); 
    } 
    this.setContentView(R.layout.fragment_login); 
    this.loginButton = (Button)this.findViewById(R.id.button); 
    this.loginButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.login, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

public static class PlaceholderFragment extends Fragment { 

    public PlaceholderFragment() { 
    } 

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

     } 
    } 
} 

而且我fragment_login.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
tools:context=".LoginActivity$PlaceholderFragment" 
android:focusable="true" 
android:background="#fcff00"> 
<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/editText" 
    android:hint="@string/user" 
    android:padding="10dp" 
    android:background="#ffffff" 
    android:layout_above="@+id/editText2" 
    android:layout_alignLeft="@+id/editText2" 
    android:layout_alignRight="@+id/editText2" /> 

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:inputType="textPassword" 
    android:ems="10" 
    android:id="@+id/editText2" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:hint="@string/pass" 
    android:background="#ffffff" 
    android:padding="10dp" /> 


<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/login" 
    android:id="@+id/button" 
    style="@style/AppTheme" 
    android:background="#ff5900" 
    android:shadowColor="#000000" 
    android:layout_below="@+id/editText2" 
    android:layout_alignLeft="@+id/editText" 
    android:layout_alignRight="@+id/editText2" 
    android:clickable="true"/> 

</RelativeLayout> 

回答

1

問題是你這樣做的方式。對於Activity,您沒有設置Fragment的視圖,您設置了一個單獨的視圖,該視圖有一個位置,即Fragment。取決於你如何做PlaceHolderFragment,以下應該得到一個工作的應用程序。

首先添加此文件:

activity_main.xml中

<FrameLayout 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

然後在你的Activity改變這些東西:

LoginActivity.java

 
/* Same stuff*/ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 

    //This is the important change right here! 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()) 
       .commit(); 
    } 

    //The stuff that you had handling buttons should go in your 
    //PlaceHolderFragment class's onCreateView() method 
} 

我希望這有助於。祝你好運!

+0

當我移動按鈕代碼時,它告訴我:「無法解析方法'setContentView(int)'」。任何想法? – MeIsOlsson

+0

如果你看看'Fragment'是如何工作的,你實際上並沒有爲它設置一個內容視圖。 'onCreateView()'返回'Fragment'將要使用的'View'。你在問題中的方式是正確的做法。如果你想從'rootView'獲得另一個'View',例如你的按鈕,你可以做'Button mybutton =(Button)rootView.findViewById(R.id.button);' –