如何在片段中为按钮设置onClickListener

时间:2015-04-20 15:13:14

标签: android android-fragments onclicklistener android-fragmentactivity

我刚开始使用片段和滑动视图。 我想重做我的项目,但是通过onClickListener()方法设置与按钮和图像的各种交互有问题

这是带有按钮(activity_extra.xml)的片段/活动的xml代码:

    <RelativeLayout 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"
    android:background="@color/rhinos" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:orientation="vertical"
        android:paddingBottom="20dip" >

        <LinearLayout
            android:id="@+id/linearLayout2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <ImageView
                android:id="@+id/fb"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/facebook_icon"
                android:contentDescription="@string/link_facebook" />

            <ImageView
                android:id="@+id/tw"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/twitter_icon"
                android:contentDescription="@string/link_twitter" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

这是Extra类的代码(应该使用extra_activity按钮的类):

public class Extra extends Fragment {

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

        // immagini extra
        View view = inflater.inflate(R.layout.activity_extra, container, false);
        ImageView fb = (ImageView) view.findViewById(R.id.fb);
        ImageView tw = (ImageView) view.findViewById(R.id.tw);

        fb.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(
                        Intent.ACTION_VIEW,
                        Uri.parse("https://www.facebook.com/"));
                startActivity(intent);
            }
        });
        tw.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri
                        .parse("https://twitter.com/"));
                startActivity(intent);
            }
        });
        return view;

        /*
         * fb.setOnClickListener(this); 
         * tw.setOnClickListener(this);
         */
    }
    /*
     * @Override public void onClick(View v) { Intent intent = null; switch
     * (view.getId()) {
     * 
     *      case R.id.fb: intent = new Intent( Intent.ACTION_VIEW,
     *      Uri.parse("https://www.facebook.com/")); 
     *      case R.id.tw: intent = new Intent(Intent.ACTION_VIEW,
     *      Uri.parse("https://twitter.com/")); 
     * } 
     * startActivity(intent);
     * }
     */
}

如果使用implements构建,那么带*的部分关注类:

public class Extra extends Fragment implements OnClickListener{

我认为缺少某些东西才能让它发挥作用,但是什么呢? 阅读各种指南和教程真的不明白我还需要进一步实施。

添加MainActivity:

public class MainActivity extends FragmentActivity  {

    Button b1,b2;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b1 = (Button) findViewById(R.id.button1);
        b2 = (Button) findViewById(R.id.button2);
        b1.setOnClickListener(new OnClickListener() {
            Fragment fragment = new Extra();
            //Extra fragment = new Extra();
            public void onClick(View v) {
                FragmentTransaction transaction = getFragmentManager()
                        .beginTransaction();
                transaction.replace(android.R.id.content, fragment);
                transaction.commitAllowingStateLoss();
            }
        });
        b2.setOnClickListener(new OnClickListener() {
            Fragment fragment = new FrammentoSinistra();
            //FrammentoSinistra fragment = new FrammentoSinistra();
            public void onClick(View v) {
                FragmentTransaction transaction = getFragmentManager()
                        .beginTransaction();
                transaction.replace(android.R.id.content, fragment);
                transaction.commitAllowingStateLoss();
            }
        });
    }
}

只需根据按下的按钮加载框架即可。 除了它的xml文件,我没有其他代码......那么缺少什么?

正如我上面写的那样:

这说明了我的应用程序:确定片段已加载。现在片段必须做他说的extra.java类!

2 个答案:

答案 0 :(得分:2)

您正在扩展FragmentActivity(公共类额外扩展FragmentActivity)。 FragmentActivityActivity,并且没有onCreateView方法。如果您想使用FragmentActivity,建议您将代码放入onCreate方法。

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ImageView fb = (ImageView) findViewById(R.id.fb);
        ImageView tw = (ImageView) findViewById(R.id.tw);

        fb.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(
                    Intent.ACTION_VIEW,
                    Uri.parse("https://www.facebook.com/"));
            startActivity(intent);
        }
       });

      tw.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri
                    .parse("https://twitter.com/"));
            startActivity(intent);
        }
      });
}

如果您需要Fragment,请将您的课程扩展到Fragmentpublic class Extra extends Fragment)。你的onCreateView方法没问题。只需在方法上添加@Override即可。并确保您拥有Activity类,其中包含Fragment。如需参考,请尝试此链接http://www.tutorialspoint.com/android/android_fragments.htm

答案 1 :(得分:0)

单击图像时,您的行为是否没有任何反应?作为&#34;按钮&#34;被定义为您需要打开可点击的图像视图(setClickable(true))。

你的片段也应该扩展Fragment类,FragmentActivity是包含片段的活动;请参阅docs,否则将无法调用正确的生命周期方法。