2013-05-02 84 views
0

我有一个活动,我需要改变布局。如何在一项活动中显示不同的布局?

在第一个布局中,我有四个按钮可以显示,第二个布局需要GridView来显示图像。

我需要在AsyncTask onPostExecute方法中显示第二个布局。

现在,我想设置两个setContentViews,但我得到以下异常:ClassCastException

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_focusarea); 
           videoBtn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      new LoadFiles().execute(); 
     } 
    }); 
    animateBtn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      new LoadFiles().execute();   
     } 
    }); 
    pdfBtn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      new LoadPDFFiles().execute();   
     } 
    }); 
} 

在我postExecute我尝试这样

protected void onPostExecute(String file_url) { 
     pDialog.dismiss();  
     runOnUiThread(new Runnable() { 
    public void run() { 
     setContentView(R.layout.gallery); 
      girGridView=(GridView) findViewById(R.id.gridView1_bir); 
      girGridView.setAdapter(new ImageAdapter(this));  
       girGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
      public void onItemClick(AdapterView<?> arg0, View view, int position,long arg3) { 
    Toast.makeText(getApplicationContext(), GridViewConfig.getResim_list().get(position), Toast.LENGTH_SHORT).show(); 
    } 
}); 
       } 
    }); 
+0

请发布您的logcat错误。 – Deepak 2013-05-02 09:48:22

回答

2

取而代之的是你可以同时包含了你的四个按钮的包装等为GridView,而这最后一个是能见度设置为“水涨船高”的布局。

当AsycTask完成后,您将隐藏按钮布局并显示GridView布局。

+0

如何使用代码???请帮助我?即时新 – 2013-05-02 10:20:14

+0

@OneManArmy很简单。在你的xml中,你在你所有的按钮周围放置了一个包装器布局(比如linearlayout,relativelayout),并且在你的gridview中放置了另一个包装器布局) - 最后一个布局具有可见性:消失了。此外,你需要你的两个包装布局的findviewbyid,并在asynctaskfinished时,你把wrapper1.setvisibility(view.gone)和wrapper2.setvisibility(view.visible) – dwbrito 2013-05-02 10:24:25

+0

PLZ你可以发布一些代码为xml..plz给例子..帮助我 – 2013-05-02 10:26:22

0

onPostExecute的AsyncTask在UI线程上运行,所以你不需要指定runonUiThread。而不是使用2 setcontent查看最好在布局文件中有2个视图,并根据需要使其不可见。

+0

该怎么做? – 2013-05-02 09:57:27

1

为什么不用两个布局或两个片段设置一个内容视图?布局可以是这样的

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <Button 
     android:id="@+id/button1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="@string/text1">   
    </Button> 
    <Button 
     android:id="@+id/button2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="@string/text2">   
    </Button> 
    <Button 
     android:id="@+id/button3" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="@string/text3">   
    </Button> 
    <Button 
     android:id="@+id/button4" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="@string/text4">   
    </Button> 
    <GridView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     ... 
    </GridView> 
</LinearLayout> 
+0

如何设置两个布局??我不知道要做那个..我刚接触android ..请帮我设置.. – 2013-05-02 09:59:48

+0

只能有一个父布局,但它可以包含尽可能多的子布局你要。 – Neoh 2013-05-04 16:22:06

1
Use one setContentView() and define separates Linear/Relative layout one for buttons and second for gridView.And hide/show the Views according to your need. 
+0

如何编写隐藏一个布局并显示另一个布局? – 2013-05-02 10:21:52

+0

使用setVisbility(View.GONE)和setVisibility(View.VISIBLE)到你从XML布局文件中找到的视图。 – 2013-05-02 10:25:47

3

而不是使用两个布局的使用单个布局波纹管

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<LinearLayout 
    android:id="@+id/MyLayoutOne" 
    android:layout_width="fill_parent" 
    android:visibility="gone" 
    android:layout_height="fill_parent" > 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="Hi This is my first layout" /> 


    <!-- Your first layout contents add here--> 



</LinearLayout> 

<LinearLayout 
    android:id="@+id/MyLayoutTwo" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="Hi This is my Second layout" /> 


    <!-- Your second layout contents add here --> 


</LinearLayout> 

</LinearLayout> 

内MyLayoutOne和第二版面内容添加您的第一个版面的内容里面MyLayoutTwo

您的活动中

而使用如下代码,

public class MainActivity extends Activity { 


LinearLayout MyLayoutOne; 
LinearLayout MyLayoutTwo; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    MyLayoutOne=(LinearLayout)findViewById(R.id.MyLayoutOne); 
    MyLayoutTwo=(LinearLayout)findViewById(R.id.MyLayoutTwo); 


    // this will make first layout visible 
    MyLayoutOne.setVisibility(View.VISIBLE); 


    // this will make second layout hidden from your layout 
    MyLayoutTwo.setVisibility(View.GONE); 



    //========================================= 

    //in your post create add this codes 

    //========================================= 

    // this will make first layout hidden 
    MyLayoutOne.setVisibility(View.GONE); 

    // this will make second layout visible in your layout 
    MyLayoutTwo.setVisibility(View.VISIBLE); 

    //========================================= 


} 



} 

这是一个最简单的方法,你必须研究碎片为更好的UI管理。你也可以使用viewflipper。

所以研究片段和Viewflipper ..

+0

PLZ检查这个[http://pastebin.com/Dcm8Y6Rf] – 2013-05-02 11:25:37

+0

即时通讯错误??? – 2013-05-02 11:26:17

+0

[http://pastebin.com/JwSUeVPZ]check这个即时通讯错误.. – 2013-05-02 12:16:29

0

朋友改变wrapper1为以下孩子的id,

<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="match_parent" 
tools:context=".Focusarea" > 

<LinearLayout 
    android:id="@+id/wrapper1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:visibility="gone" > 

    <GridView 
     android:id="@+id/gridView1_bir" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" > 
    </GridView> 
</LinearLayout> 

<RelativeLayout 
    android:id="@+id/wrapper2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ImageView 
     android:id="@+id/vid_btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="18dp" 
     android:src="@drawable/ic_launcher" /> 


</RelativeLayout> 

</LinearLayout> 

和下面的OnCreate外初始化线性布局,

LinearLayout wrapper1; 
RelativeLayout wrapper2; 


protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    wrapper1 = (LinearLayout)findViewById(R.id.wrapper1); 
    wrapper2=(RelativeLayout)findViewById(R.id.wrapper2); 


    // this will make first layout visible 
    wrapper2.setVisibility(View.VISIBLE); 


    // this will make second layout hidden from your layout 
    wrapper1.setVisibility(View.GONE); 


    ImageView videoBtn = (ImageView) findViewById(R.id.vid_btn); 
    ImageView animateBtn = (ImageView) findViewById(R.id.anit_btn); 
    ImageView pdfBtn = (ImageView) findViewById(R.id.pdf_btn); 

    videoBtn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
       new LoadFiles().execute();       
      } 
    }); 
    animateBtn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
        new LoadFiles().execute();      
      } 
    }); 
    pdfBtn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
        new LoadPDFFiles().execute();     
      } 
    }); 
    } 
    protected void onPostExecute(String file_url) { 
      // dismiss the dialog after getting VIDEOS 
      pDialog.dismiss();  
      vid=new ArrayList<String>(new ArrayList<String>(vid)); 
      videoUrl=parsing.parse(videoUrl); 
      System.out.println("VIDEO URL" +videoUrl); 
        runOnUiThread(new Runnable() { 
          public void run() { 


          //--here you wont need to initialize again-- 

           // this will make first layout visible 
           wrapper1.setVisibility(View.VISIBLE); 
           // this will make second layout hidden from your layout 
           wrapper2.setVisibility(View.GONE); 

          girGridView=(GridView) findViewById(R.id.gridView1_bir); 
          //ListView gibi buna da adapter set ediliyor. 
          girGridView.setAdapter(new ImageAdapter(this));        
          girGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View view, int position,long arg3) { 
    Toast.makeText(getApplicationContext(), GridViewConfig.getResim_list().get(position), Toast.LENGTH_SHORT).show();        
              } 
            }); 
          } 
     }); 
相关问题