1

私のAndroid Appでは、2つのダイアログフラグメントクラスを作成しました。最初のダイアログフラグメントはcomapany名のリストを提供します。このダイアログは、メインページのボタンをクリックすると表示されます。この警告ダイアログは1つの見出し、リストビューを持ち、もう一方はアラートダイアログのモデルクラスを作成するAndroid

Company 
Company 1 
Company 2 
Company 3 
Cancel 

は今二ダイアログが最初のダイアログの各項目にユーザーがクリックするとすぐにつくれますbelow-のように、ボタンを解除してください。 2番目のダイアログには、「Way of Contact」という見出しと、リストビューとキャンセルボタンが含まれています。

Way of Contact 
    Phone 
    Email 
    Copy 

ここでは、2回目のクリックと1回目のクリックの関係があります。ユーザーが会社1をクリックすると、会社1の電話番号を取得し、会社2をクリックすると会社2の電話番号を取得します。同様のケースがメールIDで発生します。

これまでのところ、私のコードはあまりにもハードコードされています。私はとにかくこのコードを実装しました。しかし、私はこの問題を解決する方法を満足していません。今私はオブジェクト指向の方法でもっと進めたいと思います。私は会社のEnumがcomapnyという名前を一定に保ち、その後電話と電子メールでマッピングを作成する可能性があることを読んだ。しかし、私は開発分野で非常に新しいです。もし誰かが私にそのことを教えてくれれば、私にとっては本当に役立つでしょう。ここで

はFirstDialogクラス

編集最初のダイアログフラグメント

public class FirstAlerDialogFragment extends DialogFragment { 

    private ListView listView; 
    private Button cancelButton; 
    private TextView title; 
    private ArrayAdapter<CompanyName> adapter; 

    public FirstAlerDialogFragment() { 

    } 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setCancelable(true); 
     setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.first_alertlist_contact, container, false); 

     //Button,ListView1 Initialization 
     listView=(ListView) rootView.findViewById(listView1); 
     cancelButton=(Button) rootView.findViewById(R.id.cancel_button); 
     title=(TextView)rootView.findViewById(R.id.title); 
     title.setText("Contact"); 

     //Create and set Adepter TO ListView1 
     adapter=new ArrayAdapter<>(this.getActivity(),R.layout.first_alertlist_textstyle,R.id.Itemname,CompanyName.values()); 
     listView.setAdapter(adapter); 
     cancelButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       dismiss(); 
      } 
     }); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 
       // ListView Clicked item index 
       int itemPosition = position; 

       dismiss(); 
       FragmentManager fm = getFragmentManager(); 
       Bundle args = new Bundle(); 
       args.putInt("position", itemPosition); 
       SecondAlertDialogFragment dialogFragment = new SecondAlertDialogFragment(); 
       dialogFragment.show(fm, "dialogFragment"); 
       dialogFragment.setArguments(args); 
       dialogFragment.show(getChildFragmentManager(), null); 

      } 
     }); 
     return rootView; 
    } 
} 

編集セカンドダイアログ

public class ContactWayFragment extends DialogFragment{ 

private ListView listView; 
private Button cancelButton; 
private String[] contactWay; 
private TextView title; 
private ArrayAdapter<String> adapter; 
private String phoneNumber, email; 

public ContactWayFragment() { 
    //Empty Constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setCancelable(true); 
    setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle); 
} 

private Company[] companies = new Company[] { 
     new Company("123", "mail1.com"), 
     new Company("456", "mail2.com"), 
     new Company("789", "mail3.com"), 
     new Company("102", "mail4.com"), 
     new Company("458", "mail5.com"), 
     new Company("977", "mail6.com") 
}; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle args) { 

    View rootView = inflater.inflate(R.layout.first_alertlist_contact, container, false); 

    //Button,ListView1 Initialization 
    listView=rootView.findViewById(R.id.listView); 
    cancelButton=rootView.findViewById(R.id.cancel_button); 
    title=rootView.findViewById(R.id.title); 
    title.setText("What do you want to do"); 
    // Defined Array values to show in ListView 
    contactWay = getResources().getStringArray(R.array.contact_way); 
    //Create and set Adepter TO ListView1 
    adapter=new ArrayAdapter<>(getActivity(), R.layout.first_alertlist_textstyle,android.R.id.text1,contactWay); 
    listView.setAdapter(adapter); 
    //cancel button to cancel this alert dialog 
    cancelButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      dismiss(); 
     } 
    }); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      // ListView Clicked item index 
      Bundle args = getArguments(); 
      int itemPosition = args.getInt("position"); 
      Company company = companies[itemPosition]; 

      if (position == 0) { 
       //dismiss(); 
       //Phone Call Alert 
       AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
       builder.setTitle("Calling to " + company.getPhoneNumber()); 
       builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
        //make a phone call 
         dialog.dismiss(); 
         Log.e("getActivity()-Call",""+getActivity()); 
         call_action(); 
        } 
       }); 
       builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // Do nothing 
         dialog.dismiss(); 
        } 
       }); 

       AlertDialog alert = builder.create(); 
       alert.show(); 

      } 
      if (position == 1) { 
       dismiss(); 

       //Email Alert Dialog 
       AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
       builder.setTitle("Email to " + company.getEmail()); 
       builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // Do nothing 
         dialog.dismiss(); 
        } 
       }); 
       builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // Do nothing 
         dialog.dismiss(); 
        } 
       }); 

       AlertDialog alert = builder.create(); 
       alert.show(); 
      } 
      if (position == 2) { 
       dismiss(); 
       Toast.makeText(getActivity(), "click 2", Toast.LENGTH_SHORT).show(); 
      } 
      if (position == 3) { 
       dismiss(); 
       Toast.makeText(getActivity(), "click 3", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 
    return rootView; 
} 
public void call_action() { 
... 
    } 

} 
@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    .... 
     } 
    } 
} 

編集コード

ための私のコードです

解答コードの助けを借りて、私は

public enum CompanyName { 
    COM1("FirstCompany"), 
    COM2("SecondCompany"), 
    COM3("ThirdCompany"); 

    private final String name; 

    private CompanyName(String name){ 
     this.name=name; 
    } 
    public String getName(){ 
     return this.name; 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 
} 

私のコードサンプルを変更しているし、会社のモデルクラスは確かに、少しハードコードさに見え、そのスイッチ/ケース

public class Company { 

    private CompanyName name; 
    private String phone; 
    private String email; 

    public Company(String phone, String email) { 

     this.phone = phone; 
     this.email = email; 

    } 

    public CompanyName getName() { 
     return name; 
    } 

    public void setName(CompanyName name) { 
     this.name = name; 
    } 

    public String getPhone() { 
     return phone; 
    } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 
} 

答えて

0

です。あなたができることは、各企業に関する情報を持つオブジェクトの配列を使用することです。

これはあなたの会社のモデルオブジェクトのようになります。

public class Company { 
    String phoneNumber, email; 

    public Company(String phoneNumber, String email) { 
     this.phoneNumber = phoneNumber; 
     this.email = email; 
    } 

    public String getPhoneNumber() { 
     return phoneNumber; 
    } 

    public String getEmail() { 
     return email; 
    } 
} 

これは、配列の宣言のようになります。

private Company[] companies = new Company[] { 
    new Company("38888180", "email1.com"), 
    new Company("411660", "email2.com"), 
    new Company("895402260", "email3.com") 
}; 

そして最後に、電子メールまたは電話番号にアクセスするには、あなただけのこの操作を行う必要があります:

... 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      // ListView Clicked item index 

      Bundle args = getArguments(); 
      //args = getArguments(); 

      int itemPosition = args.getInt("position"); 
      Company company = companies[itemPosition]; 

    ... 
     builder.setTitle("Calling to " + company.getPhoneNumber()); 
    ... 
     builder.setTitle("Calling to " + company.getEmail()); 
+0

ありがとうございます。連絡してください。私はそれを試してみましょう –

+0

あなたは歓迎です、それが動作するかどうかを教えてください) – Tharkius

+0

私はちょうどあなたのコードで始まったが、これまで私はcomapnyの電子メールと電話番号のModelクラスを作成することができます。私は本当にこのモデルで私の第二のalertdialogを整理することができます混乱しています。私は、onclickリスナーをlistviewに設定し、そして、onLeride onItemClickメソッドを設定することができます。しかし、すべてが私に困惑してしまいます。 seconfd alertdialogでスイッチのケースを減らす方法をもう少し説明してください。 –

関連する問題