Come aprire nuove attività, quando ImageView è fare clic nel frammento

Hi Im un newbie di android, può aiutarmi a implementare un click sul mio ImageView per aprire nuove attività. Ho provato diversi codici, ma l’applicazione si blocca all’avvio. Ecco il mio codice su frammenti

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);
        }
    });
}

}

  • certo che posso aiutarti. quale errore ottieni?
  • ci mostrano il stacktrace?
  • Non posso vedere alcun errore nel logcat ma quando avvio per eseguire l’applicazione si avvia, ma si blocca o interrompere. c’è un altro modo per implementare un onclick ascoltatore al mio ImageView, grazie
  • quando si fa il crash c’è un logcat-uscita di esso. se logcat non mostra nulla, basta riavviare l’IDE..
InformationsquelleAutor Bachim01 | 2013-08-16



7 Replies
  1. 8

    Come mostrato di seguito aggiungere il codice in onActivityCreated() invece di onCreate()

     @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);
            }
        });
    }
    • Va bene! funziona, grazie kettu!
    • Sempre i benvenuti…io m contento che ha funzionato per voi..
  2. 0

    Dovete scrivere la vostra Fragment1 classe :

    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);
        }
    }
  3. 0

    Si dovrebbe modificare questa impostazione:

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

    per

    fashionImg = (ImageView) getActivity().findViewById(R.id.selectone);
    • perché è che? egli ha bisogno di un riferimento alla vista, non l’attività.
  4. 0

    Primo, sostituire android:onClick="onClick" in ImageView con qualcosa di simile android:onClick="onClickTest". Quindi nel codice di scrivere qualcosa del genere:

    public void onClickTest(View v){
    
            //The MainActivity being the starting point
            Intent int = new Intent(MainActivity.this,
                    CarouselActivity.class);
            MainActivity.this.startActivity(mainIntent);
    
    }
  5. 0

    aggiungere l’ascoltatore in onCreateView. Riferimento Frammento del ciclo di vita, il problema è onCreate è chiamato prima di onCreateView così il frammento di vista non viene aggiunto al contenitore principale vista da tempo.

    @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);
    }
  6. 0

    Provare le seguenti operazioni, in primo luogo una ImageView come questo

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

    Poi posto tutte le altre ImageView o immagini in questo.
    Nel ‘Fragment1’ uso della classe 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;
            }
    });

Lascia un commento