1

こんにちは、Android の初心者です。ImageView のクリックを実装して新しいアクティビティを開くのを手伝ってくれる人もいます。いくつかのコードを試しましたが、起動時にアプリがクラッシュします。これがフラグメントの私のコードです

Fragment1.xml

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:fontFamily="sans-serif-light"
    android:paddingBottom="15dp"
    android:paddingTop="8dp" >

    <ImageView
        android:id="@+id/selectone"
        android:layout_width="fill_parent"
        android:layout_height="150dp"
        android:background="@drawable/fashion"
        android:clickable="true"
        android:focusable="true"
        android:onClick="onClick"
        android:scaleType="centerCrop" />

    <ImageView
        android:id="@+id/selecttwo"
        android:layout_width="fill_parent"
        android:layout_height="150dp"
        android:layout_below="@+id/selectone"
        android:layout_marginTop="8dp"
        android:background="@drawable/lingerie"
        android:scaleType="centerCrop" />

    <TextView
        android:id="@+id/titlelabel1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/selectone"
        android:background="#80000000"
        android:fontFamily="sans-serif-light"
        android:padding="10dp"
        android:text="Fashion"
        android:textColor="#fefefe"
        android:textSize="28sp"
        android:textStyle="italic" />

    <TextView
        android:id="@+id/titlelabel2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/selecttwo"
        android:background="#80000000"
        android:fontFamily="sans-serif-light"
        android:padding="10dp"
        android:text="Lingerie"
        android:textColor="#fefefe"
        android:textSize="28sp"
        android:textStyle="italic" />
</RelativeLayout>

Fragment1.java

package com.androidbegin.sidemenututorial;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View.OnClickListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.actionbarsherlock.app.SherlockFragment;

public class Fragment1 extends SherlockFragment {

ImageView fashionImg;

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

}

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

    //get the button view
    fashionImg = (ImageView) getView().findViewById(R.id.selectone);
    //set a onclick listener for when the button gets clicked
    fashionImg.setOnClickListener(new OnClickListener() {
        //Start new list activity
        public void onClick(View v) {
            Intent mainIntent = new Intent(getActivity(), CarouselActivity.class);
            startActivity(mainIntent);
        }
    });
}

}

4

7 に答える 7

8

以下に示すように、onCreate() の代わりに onActivityCreated() にコードを追加します。

 @Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
    // get the button view
    fashionImg = (ImageView) getView().findViewById(R.id.selectone);
    // set a onclick listener for when the button gets clicked
    fashionImg.setOnClickListener(new OnClickListener() {
        // Start new list activity
        public void onClick(View v) {
            Intent mainIntent = new Intent(getActivity(),
                    CarouselActivity.class);
            startActivity(mainIntent);
        }
    });
}
于 2013-08-16T10:40:19.723 に答える
0

次のことを試してください。まず、このような ImageView を配置します

 <ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerInParent="true"/>

次に、他のすべての ImageView または画像をこの上に配置します。「Fragment1」クラスで OnTouchListener を使用します。

image1 = (ImageView) findViewById(R.id.imageView1);

image1.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {

        Intent mainIntent =new Intent(Fragment1.this,CarouselActivity.class);
            stratActivity(mainIntent);
            return true;
        }
});
于 2013-08-16T10:57:14.840 に答える
0

Fragment1 クラスを次のように記述する必要があります。

public class Fragment1 extends SherlockFragment {

ImageView fashionImg;

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

     //get the button view
    fashionImg = (ImageView) getView().findViewById(R.id.selectone);
    return rootView;
}

    public void onClick(View v) {
        Intent mainIntent = new Intent(getActivity(), CarouselActivity.class);
        startActivity(mainIntent);
    }
}
于 2013-08-16T10:41:58.117 に答える
0

getActivity() の代わりに getApplicationContext() を試してください

于 2013-08-16T10:40:20.530 に答える
0

これを次の方法で変更する必要があります。

fashionImg = (ImageView) getView().findViewById(R.id.selectone);

fashionImg = (ImageView) getActivity().findViewById(R.id.selectone);
于 2013-08-16T10:42:08.787 に答える
0

android:onClick="onClick"まず、 をのImageViewようなものに置き換えandroid:onClick="onClickTest"ます。次に、コードに次のように記述します。

public void onClickTest(View v){

        //The MainActivity being the starting point
        Intent int = new Intent(MainActivity.this,
                CarouselActivity.class);
        MainActivity.this.startActivity(mainIntent);

}
于 2013-08-16T10:43:20.760 に答える
0

onCreateView にリスナーを追加します。フラグメントのライフサイクルを参照してください。問題は、onCreateView の前に onCreate が呼び出されるため、その時点までにフラグメントのビューが親コンテナー ビューに追加されないことです。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment1, container, false);
//get the button view
    fashionImg = (ImageView) rootView.findViewById(R.id.selectone);
    //set a onclick listener for when the button gets clicked
    fashionImg.setOnClickListener(new OnClickListener() {
        //Start new list activity
        public void onClick(View v) {
            Intent mainIntent = new Intent(getActivity(), CarouselActivity.class);
            startActivity(mainIntent);
        }
    });


    return rootView;

}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}
于 2013-08-16T10:44:01.153 に答える