2013-03-27 38 views
2

我有一个带有XML布局文件的片段。其中我有一个2点击ImageView s。 每个ImageView我设置了一个onClick方法,例如:android:onClick =“commentFragmentRemoveOnClick”。如何获得视图的父代片段的实例:

在FragmentActivity(活动没有片段),我定义它是这样的:

public void commentFragmentRemoveOnClick(View v) 
{ 

} 

没有这个片段是CommentFragment型的,它有一个public void getFragmentTag()方法 得到它的标签我保存早期时间。我需要获取点击图片的片段实例来获取它的标签。

我想:

((CommentFragment)v).getParentFragment().getFragmentTag(); 

和:

((CommentFragment)v).getParent().getFragmentTag(); 

但日食给我的错误就他们两个,这是怎么得当?

为了更清楚,这是我CommentFragment

public class CommentFragment extends Fragment { 

private final static String TAG = CommentFragment.class.getSimpleName(); 
private String fragmentTag; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

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

    Bundle bundle = getArguments(); 
    String text = bundle.getString("comment"); 
    String fullUser = bundle.getString("user"); 
    String user = fullUser.substring(0, fullUser.indexOf("@")); 
    String at = bundle.getString("at"); 

    TextView tvCmment = (TextView) rootView.findViewById(R.id.tvComment); 
    TextView tvUser = (TextView) rootView.findViewById(R.id.tvUser); 
    TextView tvAt = (TextView) rootView.findViewById(R.id.tvDate); 

    tvCmment.setText(text); 
    tvUser.setText(user); 
    tvAt.setText(at); 

    return rootView; 
} 

public void setText(String item) 
{ 
    TextView view = (TextView) getView().findViewById(R.id.tvComment); 
    view.setText(item); 
} 

public void setFragmentTag(String tag) 
{ 
    this.fragmentTag = tag; 
} 

public String getFragmentTag() 
{ 
    return this.fragmentTag; 
} 
} 

和布局文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/llCommentContainer" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:background="@drawable/try2"> 

    <TextView 
     android:id="@+id/tvUser" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/tvComment" 
     android:layout_alignParentTop="true" 
     android:background="@color/my_gray" 
     android:text="demo" 
     android:textStyle="bold" 
     android:paddingLeft="5dp" 
     android:paddingRight="5dp"  
     android:textColor="@color/my_even_darker_gray" /> 

    <TextView 
     android:id="@+id/tvComment" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/tvDate" 
     android:padding="5dp" 
     android:text="This task is described in more details if you click on it." 
     android:textColor="@color/my_even_darker_gray" /> 

    <TextView 
     android:id="@+id/tvAt" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:paddingRight="5dp" 
     android:textColor="@color/my_even_darker_gray" 
     android:layout_toRightOf="@+id/tvUser" 
     android:background="@color/my_gray" 
     android:text="at" /> 

    <TextView 
     android:id="@+id/tvDate" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/tvAt" 
     android:layout_alignBottom="@+id/tvAt" 
     android:layout_toRightOf="@+id/tvAt" 
     android:background="@color/my_gray" 
     android:text="12/02" 
     android:textColor="@color/my_even_darker_gray" /> 

    <ImageView 
     android:id="@+id/iEdit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/tvComment" 
     android:layout_marginRight="4dp" 
     android:clickable="true" 
     android:contentDescription="@drawable/add_comment_button" 
     android:onClick="commentFragmentEditOnClick" 
     android:src="@drawable/add_comment_button" /> 

    <ImageView 
     android:id="@+id/iRemove" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/iEdit" 
     android:layout_toRightOf="@+id/iEdit" 
     android:layout_marginRight="4dp" 
     android:clickable="true" 
     android:contentDescription="@drawable/add_comment_button" 
     android:onClick="commentFragmentRemoveOnClick" 
     android:src="@drawable/add_comment_button" /> 

</RelativeLayout> 

我会一点点帮助爱。

谢谢。

回答

2

我对你会解决你的问题,并帮助你在未来的一般建议 -

  1. 不要使用Android:在XML文件中的onClick,使用setOnClickListener在代码本身 - 需要尽可能避免将您的观点与应用程序的其他部分混合在一起。

  2. 尽量让片段独立于其活动。

如果图像是片段的一部分,为什么监听器是FragmentActivity的一部分?

在片段本身中使用setOnClickListener,并且您可能能够在不依赖于Activity的情况下在应用的其他拍片中使用此Framgent。

它还可以解决您识别图片被点击的片段的问题。

+0

谢谢@Pinhassi,但是如果你看一下昨天提供的代码作为答案,那就是我所做的。但再次感谢您的帮助和Hag sameah:) – 2013-03-29 09:04:59

2

v不是Fragment的实例,这就是为什么Eclipse不喜欢你的代码。如果你想要一个片段的实例,你必须使用FragmentManager和它的一个findFragmentByXXX方法。

+0

我知道v不是片段,v是ImageView里面的一个片段,我需要通过这个ImageView获取这个片段的实例。我的片段动态添加,并没有身份证。他们只有我通过setFragmentTag和getFragmentTag分配给他们的标签,我现在正在使用它。 – 2013-03-27 22:27:54

+0

在这种情况下,您使用findFragmentByTag。另外,如果你知道v不是片段,你为什么要做'((CommentFragment)v)'? – Cristian 2013-03-27 22:29:00

+0

你没有得到我的问题:通过FragmentManager使用findFragmentByTag方法我需要获取视图被点击的片段的实例,并从中提取它分配的标签,我分配给它早些时候。这就是我想要做的,如果你仔细观察,你会看到我试图获得点击查看的父母,我只是不知道它是如何完成的。 – 2013-03-27 22:33:40

0

要获得该ImageView被点击中我的片段的实例做了以下内容:

iEdit = (ImageView)rootView.findViewById(R.id.iEdit); 
    iEdit.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      Log.d(TAG, "pressed edit button"); 
      ((PicturesAndCommentsActivity) getActivity()).commentFragmentEditOnClick(fragmentTag); 
     } 
    }); 

    iRemove = (ImageView)rootView.findViewById(R.id.iRemove); 
    iRemove.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) 
     { 
      Log.d(TAG, "pressed remove button"); 
      ((PicturesAndCommentsActivity) getActivity()).commentFragmentRemoveOnClick(fragmentTag); 
     } 
    }); 

和:

在我设置两个 onClickListeners两个这样的图像的片段

片段活动我定义这两种方法是这样的:

public void commentFragmentRemoveOnClick (String tag) 
{ 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.remove(fragmentManager.findFragmentByTag(tag)).commit(); 
} 

用于删除片段,现在我工作o n编辑片段。

相关问题