2017-10-04 8 views
0

xmlのすべてのボタンに対して1つのコールインテント(onclick)を使用できますか?インテントに渡される値(電話番号)は、どのボタンがクリックされたかに基づいていますか?代わりに、このJavaサンプルのxml - Androidのすべてのボタンに対して1つのコールインテント(onclick)しか使用できませんか?

public void CallRedCross(View call) { 
    Intent callIntent = new Intent(Intent.ACTION_DIAL); 
    callIntent.setData(Uri.parse("tel:09079338303")); 
    startActivity(callIntent); 
} 

public void CallViracMPS(View call) { 
     Intent callIntent = new Intent(Intent.ACTION_DIAL); 
     callIntent.setData(Uri.parse("tel:09183242541")); 
     startActivity(callIntent); 
    } 

私は、すべてのボタンの1人のコール意図を持っている必要があります。

public void CallPhone(View call) { 
     Intent callIntent = new Intent(Intent.ACTION_DIAL); 
     callIntent.setData(Uri.parse("tel: **BUTTON VALUE** ")); 
     startActivity(callIntent); 
    } 

Please Check Sample Image here...

+0

あなたのjson値を渡してください....... – sushildlh

+0

リサイクラービューを試してみてください:https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html –

答えて

0

確かにそれはあなたが良い感じが、なぜあなたはそれらのすべてのための1人の意図を使いたいん行う場合、あなたが簡単にあなたのテントクラスレベルの変数作ることができます。インテントとは、「意図」やそれ以外のアクションです。私はIntentFactoryを作成して、必要なパラメータを渡し、呼び出し元が使用するためのインテントを返すことを好みます。これにより、すべてのインテント管理とアクティビティの変更が1つの中央の場所に集中することができます。ここに例があります。

/** 
* 
* Created by App Studio 35 on 6/27/17. 
*/ 
public class IntentFactory { 

    /** 
    * 
    * @param context 
    * @return intent 
    */ 
    public static Intent getLoginIntent(Context context, boolean launchedFromNotification, String idOfDetailToOpen){ 
     Intent intent = new Intent(context, LoginActivity.class); 
     intent.putExtra(Globals.INTENT_KEYS.KEY_FROM_BADGE_ACCESS, launchedFromNotification); 
     intent.putExtra(Globals.INTENT_KEYS.KEY_ID_OF_DETAIL_TO_OPEN, idOfDetailToOpen); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     return intent; 

    } 
    /** 
    * 
    * @param context 
    * @return 
    */ 
    public static Intent getSettingsIntent(Context context){ 
     Intent intent = new Intent(context, SettingsActivity.class); 
     return intent; 
    } 
    /** 
    * 
    * @param filePath 
    * @param subject 
    * @param body 
    * @return 
    */ 
    public static Intent getSendImageIntent(String filePath, String subject, String body){ 
     Intent intent = new Intent(Intent.ACTION_SEND); 
     intent.setType("image/jpg"); 
     intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + filePath)); 
     intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
     intent.putExtra(Intent.EXTRA_TEXT, body); 
     return Intent.createChooser(intent, "Share File"); 

    } 
    /** 
    * 
    * @param toEmailAddresses 
    * @param subject 
    * @param body 
    * @param uris 
    * @return 
    */ 
    public static Intent getEmailIntent(String[] toEmailAddresses, String subject, String body, ArrayList<Uri> uris) { 
     Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); 
     intent.setType("text/plain"); 
     intent.putExtra(Intent.EXTRA_EMAIL, toEmailAddresses); 
     intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
     intent.putExtra(Intent.EXTRA_TEXT, body); 
     intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

     if(uris != null) { 
      intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); 

     } 

     return Intent.createChooser(intent, "Send mail..."); 

    } 
    /** 
    * Used to launch to app details screen for toggling of permissions or other things 
    * @param context 
    * @return 
    */ 
    public static Intent getShowAppDetailSettingsIntent(Context context){ 
     Intent intent = new Intent(); 
     intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
     intent.addCategory(Intent.CATEGORY_DEFAULT); 
     intent.setData(Uri.parse("package:" + context.getPackageName())); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
     intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 
     return intent; 

    } 

} 

もちろん、あなたの個人的な意図に合わせてカスタマイズします。しかし、それは重いオブジェクトではないので、私はインテントを再利用する方法を見つける上で、読みやすさとメンテナンス可能なコードを好むでしょう。そのようにしたい場合は、単にクラスレベルに移動することはできますが、望ましい場合はクラスレベルの変数Intentを参照するだけです。

申し訳ありません、私はただ読んだので、押されたボタンを使用して渡す文字列を表しています。あなたのリストが静的である場合、単にタグの中に値を入れることで、android:tag要素でこれを行うことができます。

ただし、リストが動的な場合は、バインドビューにクリックが含まれている必要があります。アダプタのコンストラクタはclickのコールバックのためのインタフェースをとる必要があり、インデックスに関連付けられたクリックされたモデルを渡すことができます。もちろん、そのときはmodel.getTelephoneNumberを使用してメソッドに渡します。それは理にかなっていますか?

あなたの静的リストのタグ方式を使用するように要求したとして、あなたが行うことができます:

私は単にタグを使用して、あなたを指摘もちろん
public void CallRedCross(View call) { 
    Intent callIntent = new Intent(Intent.ACTION_DIAL); 
    callIntent.setData(Uri.parse("tel:"+call.getTag())); 
    startActivity(callIntent); 
} 

、上記のコードは、あなたのコードです。

+0

こんにちはサム!はい。私のリストの内容はすべて静的で、リストビューのように見えます。私はあなたがまだJSONに精通していないので、あなたが導入したアンドロイド:タグ要素に関心があります。アンドロイド/ javaのまだ初心者です。私はできるだけ早く/最も簡単なアプローチを知りたい。 このようにxmlにandroid:tagの番号を追加することはできますか? android:tag = "09163167865"? 私はそれを私の既存のコールインテントでどのように呼び出すことができますか?ありがとう! –

+0

正しいのですが、setDataでmyView.getTag()を実行するだけで、XMLセットタグ – Sam

+0

からプルします。本当に怠け者になってしまった場合、onClickリスナーを同じものに置くことができますメソッドは、公共のビューを受け入れ、ちょうどそこからview.getTagを取得 – Sam

関連する問題