替换视图时遇到问题。
这是我的View容器:
Container View
--> newMethod 0
--> savedMethod 0
--> savedMethod 1
[...]
--> newMethod 1
--> savedMethod 0
[...]
目前,我有两个newNethod视图和一些saveMethod视图。
我想更改已点击的savedMethod视图。这是代码
savedMethod.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mSelectedViewIndex = ((ViewGroup) v.getParent()).indexOfChild(v);
mSelectedView = v;
mSelectedViewClicked = (LinearLayout) inflater.inflate(R.layout.component_saved_method_container_01_selected,null);
((ViewGroup) v.getParent()).removeView(v);
((ViewGroup) v.getParent()).addView(mSelectedViewClicked, mSelectedViewIndex);
// ((ViewGroup) saveMethod.getParent()).addView(mSelectedViewClicked, mSelectedViewIndex);
[...]
我检测到,我的addView行产生了Nullpointer异常:
03-21 14:36:33.608: E/AndroidRuntime(13192): java.lang.NullPointerException
03-21 14:36:33.608: E/AndroidRuntime(13192): at com.xxxx.xxxx.view.NativeProfileFragment$4.onClick(NativeProfileFragment.java:326)
03-21 14:36:33.608: E/AndroidRuntime(13192): at android.view.View.performClick(View.java:4633)
03-21 14:36:33.608: E/AndroidRuntime(13192): at android.view.View$PerformClick.run(View.java:19330)
[...]
如果我将此行更改为以下内容:
((ViewGroup) saveMethod.getParent()).addView(mSelectedViewClicked, mSelectedViewIndex);
然后更改有效。但仅限于最后添加的newMethod(1)saveMethods。如果我现在从newMethod(0)单击一个saveMethod,那么我的代码将获得正确的索引,从索引上的newMethod(1)替换savedMethod。这似乎是逻辑上的,因为我使用saveMethod.getParent()。但是我怎么能用所有newMethods来解决这个问题呢?
非常感谢您的帮助!
答案 0 :(得分:1)
我解决了这个问题。
我将ViewParent v.parent()保存在变量中并使用它。
以下是最终代码:
savedMethod.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mSelectedViewIndex = ((ViewGroup) v.getParent()).indexOfChild(v);
mSelectedView = v;
mSelectedViewParent = v.getParent();
mSelectedViewClicked = (LinearLayout) inflater.inflate(R.layout.component_saved_method_container_01_selected,null);
((ViewGroup) mSelectedViewParent).removeView(v);
((ViewGroup) mSelectedViewParent).addView(mSelectedViewClicked, mSelectedViewIndex);
// ((ViewGroup) saveMethod.getParent()).addView(mSelectedViewClicked, mSelectedViewIndex);
[...]
现在它有效。但我无法理解为什么没有将ViewParent存储在变量中就无法工作。