我想用代码替换其他视图
例如,我需要按代码将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
谢谢
答案 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)
为此,请同时选择imageview
和progressBar
,并根据您的要求设置可见性。
如果您希望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