用其他视图替换视图按代码

时间:2011-03-02 09:55:33

标签: android


我想用代码替换其他视图 例如,我需要按代码将imageview更改为progressBar

public void changeToProgressBar(ImageView imageview,Context context){
            ProgressBar one = new ProgressBar(context);
            one.setLayoutParams(imageview.getLayoutParams());
            imageview.setVisibility(View.GONE);
            one.setVisibility(View.VISIBLE);

            //NOW I NEED TO PLACE 'one' EXACTLY THE PLACE WHERE  'imageview' WAS THERE 
        }

我需要使用这么多地方。我知道要通过发送父viewgroup进行设置 无论如何从viewgroup获得父imageview 谢谢

7 个答案:

答案 0 :(得分:10)

这是微不足道的,其他海报已经与解决方案联系或暗示。您可以通过View.getParent()获取View的父级。您需要将返回的值转换为ViewGroup(q:View的父级可以是除ViewGroup之外的其他内容吗?)。将父级作为ViewGroup后,您可以执行ViewGroup.removeChild(viewToRemove)以删除旧视图,并使用ViewGroup.addChild(viewToAdd)添加新视图。

您可能还希望在与删除视图相同的索引处添加新视图,以确保不将新视图置于其他视图的顶部或下方。这是一个完整的实用程序类供您使用:

import android.view.View;
import android.view.ViewGroup;

public class ViewGroupUtils {

    public static ViewGroup getParent(View view) {
        return (ViewGroup)view.getParent();
    }

    public static void removeView(View view) {
        ViewGroup parent = getParent(view);
        if(parent != null) {
            parent.removeView(view);
        }
    }

    public static void replaceView(View currentView, View newView) {
        ViewGroup parent = getParent(currentView);
        if(parent == null) {
            return;
        }
        final int index = parent.indexOfChild(currentView);
        removeView(currentView);
        removeView(newView);
        parent.addView(newView, index);
    }
}

需要考虑的是,当您将一个视图替换为另一个视图时,您将失去相对布局中的任何定位。对此的一个解决方案是确保要替换的视图包装在另一个视图中,并且包装的容器视图是以相对布局定位的视图。

答案 1 :(得分:0)

为此,请同时选择imageviewprogressBar,并根据您的要求设置可见性。

例如

如果您希望progressBar可见,请为setvisibility(Visibility.GONE)添加imageview,并为setvisibility(Visibility.VISIBLE)添加progressBar

答案 2 :(得分:0)

正如User333描述的可能是一个解决方案.. 也可以通过调用yourview.removeView(imageview)删除图片视图,然后创建进度条并将其放在视图中,而不是yourview.addView(progressbar)

答案 3 :(得分:0)

通过从活动级别调用findViewById()来检索您想要更改的视图
http://developer.android.com/reference/android/app/Activity.html#findViewById(int
然后找到您要更改的子视图
{{ 3}})
然后使用http://developer.android.com/reference/android/view/View.html#findViewById(int中的函数来操作视图。

答案 4 :(得分:0)

您可以从任何其他简单的java类或其他活动中更改Android活动视图 您只需通过当前视图并通过此视图获取您想要更改的元素

As:

public class MainActivity extends Activity{

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

    // Setting UI
    View currentView = getWindow().getDecorView().getRootView();

    //showHeaderLayout is simple java class or it can be any activity
    changeLayout.setView(currentView);

}


类:changeLayout

 public class changeLayout{
    public static View setView(final Activity activity, final View myView)
     {
      // myView helps to get Activity view , which we want to change.
      TextView tv = (TextView) myView.findViewById(R.id.tv); 
      tv.setText("changs Text Via other java class !!");
     }
  }

注意:通过视图,您可以更改活动外的任何活动视图。

答案 5 :(得分:0)

我认为以下是最好的方法,因为我们不需要设置布局参数。

setvisibility(Visibility.GONE)
setvisibility(Visibility.VISIBLE)

答案 6 :(得分:0)

我确信以下链接不仅可以帮助您,还可以向您显示您的要求方向。 https://stackoverflow.com/a/3760027/3133932