我在哪里可以在片段中添加FindViewById()和侦听器?

时间:2017-07-28 11:42:43

标签: android android-fragments android-fragmentactivity

我创建了Fragment并将其称为Kabar,我可以看到ButtonTextView按预期显示。

这是我的Fragment

public class Kabar extends Fragment   {
    private Button button;
    private TextView text;

    public Kabar() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v= inflater.inflate(R.layout.fragment_kabar , container, false);
        return v;
    }
}

这是我的fragment_kabar布局:

 <FrameLayout
 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="com.examplee.my.Kabar">

     <!-- TODO: Update blank fragment layout -->
     <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent">
         <TextView
             android:id="@+id/tt1"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="mohsen kabar" />

         <Button
             android:id="@+id/tt2"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginTop="113dp"
             android:text="Button"
             android:layout_below="@+id/mohsenkabar"
             android:layout_alignParentRight="true"
             android:layout_alignParentEnd="true"
             android:layout_marginRight="93dp"
             android:layout_marginEnd="93dp" />
     </RelativeLayout>

我需要使用ButtonTextView

我可以在哪里放置此代码?

text=(TextView) text.findViewById(R.id.tt1);
button=(Button) button.findViewById(R.id.tt2);
button.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        tt1.setText("kkk mmm bbb ddd");
    }
});

5 个答案:

答案 0 :(得分:2)

有两个选项 onCreateView onViewCreated (首选)方法。

void onViewCreated (View view, Bundle savedInstanceState)

  

在onCreateView(LayoutInflater,ViewGroup,   Bundle)已经返回,但在恢复任何已保存的状态之前   到了视野。这为子类提供了初始化自己的机会   一旦他们知道他们的视图层次结构已经完全创建。该   但是,片段的视图层次结构不会附加到其父级   这一点。

答案 1 :(得分:1)

尝试将此代码添加到kabar片段

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v= inflater.inflate(R.layout.fragment_kabar , container, false);

      TextView  text=(TextView) v.findViewById(R.id.tt1);
      TextView  button=(TextView) v.findViewById(R.id.tt2);

      button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
      text.setText("kkk mmm bbb ddd");
       }
   });
    return v;
}

答案 2 :(得分:1)

将您的代码替换为 onCreateView

中的代码
text  =(TextView) v.findViewById(R.id.tt1); 
button=(Button) v.findViewById(R.id.tt2); 
button.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) {
        text.setText("kkk mmmm bbbb ddd"); 
    } 
}); 

答案 3 :(得分:1)

在您的代码中进行此更改

text=(TextView) v.findViewById(R.id.tt1);
button=(Button) v.findViewById(R.id.tt2);
button.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        text.setText("kkk 'mmm' 'bbb' 'ddd'");
    }
});

答案 4 :(得分:1)

您应该在Kabar OnCreateView中的Fragment添加您的代码:

public class Kabar extends Fragment {

    private Button button;
    private TextView text;

    public Kabar() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_kabar , container, false);

        TextView  text = (TextView) v.findViewById(R.id.tt1);
        Button button = (Button) v.findViewById(R.id.tt2);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                text.setText("kkk mmm bbb ddd");
            }
        });
        return v;
    }
}