按钮onclick中调用片段问题

时间:2012-05-30 08:54:28

标签: android android-layout android-fragments

我创建了一个片段扩展类来调用布局,如下所示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

   <TextView
        android:id="@+id/date_time_label"
        android:layout_centerVertical="true"
        android:layout_marginLeft="200dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:textSize="32dp"
        android:textStyle="bold"

        android:text="time_label"
        />

    <TextView
        android:id="@+id/last_view_time"
        android:layout_toRightOf="@+id/date_time_label"
        android:layout_alignBaseline="@+id/date_time_label"
        android:layout_marginLeft="8dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="32dp"

        />

</LinearLayout>



package com.appnetics;

import java.text.SimpleDateFormat;
import java.util.Date;



import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;




/**
 * DateTime
 */
public class details extends Fragment {
    private static String getDateTimeString(Date time) {
        return new SimpleDateFormat("d MMM yyyy HH:mm:ss")
            .format(time);
    }

    private final String time = getDateTimeString(new Date());

    /** @see android.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) */
    @Override
    public View onCreateView(
        LayoutInflater inflater,
        ViewGroup container,
        Bundle b)
    {
        View view = inflater.inflate(
            R.layout.details,
            container,
            false);  //!!! this is important

        ((TextView) view.findViewById(R.id.last_view_time))
            .setText(time);

        return view;
    }
}

现在使用它我创建这样的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/btn_showdetails"
        android:layout_width="100dip"
        android:layout_height="wrap_content"
        android:layout_marginLeft="110dip"
        android:layout_marginTop="15dip"
        android:text="Show Details" />

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" 
     android:id="@+id/my_parent_layout"
    >
    </LinearLayout>



</LinearLayout>

关于按钮的点击事件我说

setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                FragmentManager fragmentManager = getFragmentManager();
                        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                        details fragment = new details();
                        fragmentTransaction.add(R.id.my_parent_layout, fragment);
                        fragmentTransaction.commit();


            }
        }); 

但它会引发错误 方法getFragmentManager()未定义类型new View.OnClickListener(){}

任何想法如何解决

3 个答案:

答案 0 :(得分:5)

如果从片段调用活动然后在下面的代码或调用片段到片段然后只需替换代码而不是startactivity onclick方法

public class FragmentA extends Fragment implements OnClickListener{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_start, container, false);

        Button button1 = (Button) v.findViewById(R.id.StartButton);
        button1.setOnClickListener(this);
        return v;
    }

    @Override
    public void onClick(View v) {
        startActivity(new Intent(getActivity(),testing.class));
        }
    }
}

答案 1 :(得分:1)

在侦听器定义之前声明并设置fragmentManager为final。

final FragmentManager fragmentManager = getFragmentManager();

<your listener declaration>

你应该能够在听众中使用它。

答案 2 :(得分:1)

代码下方

    Button publishButton =(Button)                                                                                                  
                          fragmentView.findViewById(R.id.publishButton);
    publishButton.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
              publish();
           }
      });