Метод Android onClick ImageSwitcher

В основном у меня есть один массив, который имеет 2 изображения, как будто сейчас, но со временем их будет больше. Изображения с коммутатора массива каждые несколько секунд. я застрял с методом onClick. Конечная цель, когда пользователь нажимает на это изображение, открывается новый класс Activity. Каждое изображение имеет свой собственный класс Activity, поэтому, когда пользователь нажимает на него, оно должно быть направлено на этот конкретный класс.

Мне вчера помогли

public void onClick(View v) {
       Intent n = null;
       int id = v.getId();
       switch (id){
           case R.id.someId:
                n = new Intent(getActivity(), FragMent1.class);
                break;
           case R.id.someOtherId:
                n = new Intent(getActivity(), FragMent2.class);
                break;
        }

я могу установить первый оператор case как «R.id.textSwitcher», но вторая проблема. Поскольку я хочу, чтобы изображения анимировались в одном месте, новый R.id... означает новое местоположение, а также новое "mSwitcher1.setOnClickListener(new View.OnClickListener()"

public class Animation extends Fragment implements AnimationListener {

    public HomeAnimation(){}
    private static boolean flag = false;
     Animation anim;
     private Handler handler;
     public ImageSwitcher mSwitcher,mSwitcher1;

    int textToShow[] = {R.drawable.dabangg, R.drawable.car };

    int messageCount = textToShow.length;
    int currentIndex = -1;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       View v = inflater.inflate(R.layout.imgswitch, container, false);
        mSwitcher = (ImageSwitcher) v.findViewById(R.id.imageSwitcher1);
        mSwitcher.setFactory(mFactory);
        anim = AnimationUtils.loadAnimation(getActivity(),R.anim.fade_in);

        mSwitcher.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent n = null;
                 int id = v.getId();
                // Fragment fragment = null;
                //Bundle args = new Bundle();
                switch (v.getId()){
                case 0:
                    n = new Intent(getActivity(), Fragment1.class);
                    getActivity().startActivity(n);
                    break;
                case 1:
                    n = new Intent(getActivity(), Fragment2.class);
                    getActivity().startActivity(n);
                    break;
                }
            }
        });
        // set animation listener
        anim.setAnimationListener(this);
        return v;    
    }

public void updateTextView() {

    int maxIndex = textToShow.length;
    Random random = new Random();
    int generatedIndex = random.nextInt(maxIndex);
    mSwitcher.setImageResource(textToShow[generatedIndex]);

}

Вот то, что я обновил, если это кому-то нужно

public void updateTextView() {

        int maxIndex = textToShow.length;
        Random random = new Random();
        final int generatedIndex = random.nextInt(maxIndex);
        mSwitcher.setImageResource(textToShow[generatedIndex]);
        mSwitcher.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent n = null;

                 switch(generatedIndex){
                 case 0:
                     n = new Intent(getActivity(), Fragment1.class);
                       getActivity().startActivity(n);
                       break;

                 case 1:
                      n = new Intent(getActivity(), Fragment2.class);
                       getActivity().startActivity(n);
                       break;
                 case 2:
                       n = new Intent(getActivity(), Fragment3.class);
                       getActivity().startActivity(n);
                       break;

                }
            }
         });

person Mihir    schedule 25.03.2014    source источник
comment
В вашем вопросе нет вопроса.   -  person ElDuderino    schedule 25.03.2014
comment
Конечная цель, когда пользователь нажимает на это изображение, открывается новый класс Activity. Каждое изображение имеет свой собственный класс Activity, поэтому, когда пользователь нажимает на него, оно должно быть направлено на этот конкретный класс.   -  person Mihir    schedule 25.03.2014
comment
Проблема в том, что id, которое вы получаете, является id из ImageSwitcher , но вам нужно фактическое Image, которое отображается в данный момент? Если да, то, возможно, getDisplayedChild() — это то, что ты хочешь   -  person codeMagic    schedule 25.03.2014
comment
codeMagic - я добавил свой полный код к исходному вопросу, не могли бы вы мне помочь, как я могу узнать идентификатор отображаемого в данный момент изображения?   -  person Mihir    schedule 25.03.2014


Ответы (1)


У меня нет времени проверить это прямо сейчас, и я не совсем уверен, что понимаю, в чем ваша проблема, но попробуйте это и посмотрите, хотите ли вы этого. Я оставлю комментарии в коде

mSwitcher.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent n = null;
             int id = v.getId();
            // Fragment fragment = null;
            //Bundle args = new Bundle();
            switch (v.getId()){
            case 0:
              /* 
                 below should give you the index for the displayed image
                 you can compare this to the ids in your array using the index
              */
               if (v.getDisplayedChild() == 0) { // if 1st image in array do this
                   n = new Intent(getActivity(), Fragment1.class);
                   getActivity().startActivity(n);
               }
               if (v.getDisplayedChild() == 1) { // if 2nd image in array do this
                   n = new Intent(getActivity(), Fragment2.class);
                   getActivity().startActivity(n);
               }
              break;
person codeMagic    schedule 25.03.2014
comment
@Mihir Хорошо, дайте мне знать, если это не то, что вы ищете - person codeMagic; 25.03.2014
comment
Теперь он работает, пожалуйста, взгляните на исходный вопрос. я обновил некоторые незначительные вещи. Единственное, о чем теперь мне нужно беспокоиться, так это о том, что приложение продолжает падать, потому что оно может выполнять много работы в основном потоке. - person Mihir; 26.03.2014
comment
@Mihir Я посмотрел на ваш первоначальный вопрос, но не вижу ничего, что могло бы вызвать этот сбой. Может быть, у вас есть другой код, который выполняет множество операций или что-то подобное? - person codeMagic; 26.03.2014
comment
я добавил свой полный код в исходный вопрос. у меня есть runnables, которые делают анимацию. Я заметил в Logcat, что когда я нажимаю на любое изображение и когда он собирается перейти к новому классу активности, тогда пропускается ~ 300-500 кадров, и именно тогда я вижу много работы в основном потоке. Мой план состоит в том, чтобы преобразовать активность в фрагмент и посмотреть, будет ли это иметь значение. - person Mihir; 26.03.2014
comment
codeMagic - я обнаружил проблему, проблема заключалась в том, что размер изображения, используемого в массиве, был слишком большим. Теперь все работает :) - person Mihir; 27.03.2014