2015-02-23 3 views
-2

Здесь я написал код для перехода к различным ссылкам с помощью разных кнопок в Android. Есть ли в любом случае, чтобы уменьшить мой код дальше, чем я закодировал. Если это возможно, пожалуйста, помогите мне уменьшить код. Вот мой код:Как уменьшить этот ниже код Java?

Button tv = (Button) findViewById(R.id.my1); 
    tv.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      v.startAnimation(myscale); 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         Intent intent = new Intent(
           Intent.ACTION_VIEW, 
           Uri.parse("link1")); 
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         startActivity(intent); 
        } catch (Exception e) { 
         Log.e("Exception Caught", e.toString()); 
        } 

       } 
      }, 50); 

     } 
    }); 

    Button tv1 = (Button) findViewById(R.id.my2); 
    tv1.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      v.startAnimation(myscale); 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         Intent intent = new Intent(
           Intent.ACTION_VIEW, 
           Uri.parse("link2")); 
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         startActivity(intent); 
        } catch (Exception e) { 
         Log.e("Exception Caught", e.toString()); 
        } 

       } 
      }, 50); 

     } 
    }); 
    Button tv2 = (Button) findViewById(R.id.my3); 
    tv2.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      v.startAnimation(myscale); 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         Intent intent = new Intent(
           Intent.ACTION_VIEW, 
           Uri.parse("link3")); 
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         startActivity(intent); 
        } catch (Exception e) { 
         Log.e("Exception Caught", e.toString()); 
        } 

       } 
      }, 50); 

     } 
    }); 
+0

Поскольку вы делаете то же самое с тремя разными кнопками '' '' '' '', почему бы не написать метод, который принимает аргумент 'Button' и называет его три раза? – ajb

+0

Извините, мне нужно отобразить 3 кнопки, и они должны перейти к трем различным ссылкам: –

+1

Тогда вы не должны были помещать ту же ссылку в свой пример кода (ОК, спасибо за ее редактирование). В любом случае, все это означает, что вы добавляете еще один аргумент в свой метод для передачи ссылки. – ajb

ответ

0

Создайте один метод для прослушивания кликов и используйте, если условие.

Вот пример кода.

Ваш OnCreate Код:

Button tv = (Button) findViewById(R.id.my1); 
onClick(tv); 

tv1 = (Button) findViewById(R.id.my2); 
onClick(tv1); 

Button tv2 = (Button) findViewById(R.id.my3); 
onClick(tv2); 

Общий метод: Объявить mLink переменной, как Global

public void onClick(View v) 
    { 
     v.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(v == tv) 
        mLink = "link1"; 
       else if(v == tv1) 
        mLink = "link2"; 
       else if(v == tv2) 
        mLink = "link3"; 

       v.startAnimation(myscale); 
       new Handler().postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(mLink)); 
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
          startActivity(intent); 
         } catch (Exception e) { 
          Log.e("Exception Caught", e.toString()); 
         } 
        } 
       }, 50); 
      } 
     }); 
    } 
+0

Это сработало для меня. Спасибо, @CapDroid –

0

осуществлять onClickListener от вашей активности и переопределить метод OnClick() и написать свой код таким образом

@Override 
    public void onClick(View v) { 
     super.onClick(v); 
     switch (v.getId()) {  
     case R.id.my1: 
      //your code here 
      break; 
     case R.id.my2: 
      //your code here 
      break; 
     } 
2

После попробовать следующим образом взять метод повторного удобство

public void openLink(final String link){ 
v.startAnimation(myscale); 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        Intent intent = new Intent(
          Intent.ACTION_VIEW, 
          Uri.parse(link)); 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        startActivity(intent); 
       } catch (Exception e) { 
        Log.e("Exception Caught", e.toString()); 
       } 

      } 
     }, 50); 
} 

и реализует onClickListener и в OnClick

@Override 
public void onClick(View v) { 
    super.onClick(v); 
    switch (v.getId()) {  
    case R.id.my1: 
     openLink(link1); 
     break; 
    case R.id.my2: 
     openLink(link2); 
     break; 
    case R.id.my3: 
      openLink(link3); 
     break; 
    } 

Надеюсь, это поможет вам.

1
Button tv = (Button) findViewById(R.id.my1); 
    tv.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startAnotherActivity("link1"); 
     } 
    }); 

    Button tv1 = (Button) findViewById(R.id.my2); 
    tv1.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startAnotherActivity("link2"); 
     } 
    }); 
    Button tv2 = (Button) findViewById(R.id.my3); 
    tv2.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startAnotherActivity("link3"); 

     } 
    }); 

    private void startAnotherActivity(final String link){ 
     v.startAnimation(myscale); 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        Intent intent = new Intent(
          Intent.ACTION_VIEW, 
          Uri.parse(link)); 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        startActivity(intent); 
       } catch (Exception e) { 
        Log.e("Exception Caught", e.toString()); 
       } 

      } 
     }, 50); 

    } 
0

ОК, я отправлю пример, но только потому, что это немного не - тривиальная концепция, которая требует объяснения:

Button tv = (Button) findViewById(R.id.my1); 
setListenerForButton(tv, "link1"); 
Button tv1 = (Button) findViewById(R.id.my2); 
setListenerForButton(tv1, "link2"); 
Button tv2 = (Button) findViewById(R.id.my3); 
setListenerForButton(tv1, "link3"); 



private void setListenerForButton(Button button, final String link) { 
    button.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      v.startAnimation(myscale); 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         Intent intent = new Intent(
           Intent.ACTION_VIEW, 
           Uri.parse(link)); 
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         startActivity(intent); 
        } catch (Exception e) { 
         Log.e("Exception Caught", e.toString()); 
        } 

       } 
      }, 50); 

     } 
    }); 
} 

Подробнее о том, что для link используется для анонимного внутреннего класса, который вы настраиваете для слушателя, link должен быть final.

Я рассмотрел это и верю, что это сработает, но я не пробовал.

Смежные вопросы