2016-04-15 10 views
0

緊急電話番号リストを提供して、ユーザーが独自のカスタムエントリを追加して保存できるようにしようとしています。何らかの理由で、ListViewがアクティビティに表示されません。 ListViewの各セグメントに2つのテキストボックスを保持するために作成したCustomAdapterクラスで何か問題があると私はかなり確信しています。ListViewが表示されない

また、どのようなセグメントの電話番号でも電話のアクティビティを開始するためにlistViewを設定しようとしていますが、これを正しく行っているかどうかはわかりません。

PhoneList.java:

public class PhoneList extends AppCompatActivity { 

    ArrayList<String> customList; 
    ArrayList<String> numList; 
    Bundle b; 
    TinyDB tinydb; 
    CustomAdapter dataAdapter; 
    ListView phoneListView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_phone_list); 
     phoneListView = (ListView)findViewById(R.id.listViewPhone); 
     Integer num = null; 
     String label = ""; 
     customList = null; 
     numList = null; 
     tinydb = new TinyDB(this); 
     Button saveContact = (Button)(findViewById(R.id.button4)); 

     b = new Bundle(); 


     customList = tinydb.getListString("label"); 
     ArrayList<Integer> temp = tinydb.getListInt("num"); 
     for(int i = 0; i < temp.size(); i++){ 
      numList.add(temp.get(i).toString()); 
     } 


     saveContact.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       EditText enteredLabel = (EditText)findViewById(R.id.editText2); 
       EditText enteredNum = (EditText)findViewById(R.id.editText); 
       String label = enteredLabel.getText().toString(); 
       Integer num = Integer.parseInt(enteredNum.getText().toString()); 
       b.putString("label",label); 
       b.putInt("num",num); 
       addPhoneItem(); 


      } 
     }); 


     ArrayList<String> phoneList = new ArrayList<>(); 
     phoneList.add("Emergencies"); 
     phoneList.add("Travel Info "); 
     phoneList.add("Poison Control "); 
     phoneList.add("AAA: 1(800)836-2582"); 
     if(customList != null && customList.size() > 0) phoneList.addAll(customList); 

     ArrayList<String> numberList = new ArrayList<>(); 
     numberList.add("911"); 
     numberList.add("511"); 
     numberList.add("18002221222"); 
     numberList.add("18008362582"); 
     if(numList != null && numList.size()>0) { 
      for (int i = 0; i < numList.size(); i++) { 
       numberList.add(numList.get(i).toString()); 
      } 
     } 



     dataAdapter = new CustomAdapter(this,numberList,phoneList); 
     phoneListView.setAdapter(dataAdapter); 


    } 
    public void addPhoneItem(){ 
     customList.add(b.getString("label")); 
     numList.add(b.getString("num")); 
     tinydb.putListString("label",customList); 
     tinydb.putListString("num",numList); 
     dataAdapter = new CustomAdapter(this,numList,customList); 
     phoneListView.setAdapter(dataAdapter); 

    } 
    private class CustomAdapter extends ArrayAdapter<String> { 
     ArrayList<String> labels; 
     ArrayList<String> nums; 
     Context context; 

     public CustomAdapter(Context context, ArrayList<String> n,ArrayList<String> l) { 
      super(context,R.layout.phone_item); 
      this.context = context; 
      labels = new ArrayList<String>(); 
      labels.addAll(l); 
      nums = new ArrayList<String>(); 
      nums.addAll(n); 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      try { 
       ViewHolder holder = null; 
       if (convertView == null) { 
        LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        convertView = vi.inflate(R.layout.phone_item, null); 
        holder = new ViewHolder(); 
        holder.viewLabel = (TextView) convertView.findViewById(R.id.editText); 
        holder.viewNumber = (TextView) convertView.findViewById(R.id.editText2); 
        convertView.setTag(holder); 


       } else { 
        holder = (ViewHolder) convertView.getTag(); 
       } 

       String label = labels.get(position); 
       String num = nums.get(position); 
       holder.viewLabel.setText(label); 
       holder.viewNumber.setText(num); 
       holder.viewNumber.setTag(num); 
       holder.viewNumber.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         String str = "tel:" + (EditText) v.getTag(); 
         Intent intent = new Intent(Intent.ACTION_CALL); 
         intent.setData(Uri.parse(str)); 
         try { 
          startActivity(intent); 
         } catch (Exception e) { 
          Toast.makeText(getContext(),"Exception Caught in CustomAdapter",Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }); 



      } 
      catch(Exception e){ 
       Toast.makeText(getContext(),"Exception caught",Toast.LENGTH_SHORT).show(); 

      } 
      return convertView; 

     } 

    } 
    private class ViewHolder{ 
     TextView viewLabel; 
     TextView viewNumber; 
    } 
} 

activity_phone_list.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res``/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.rvtripapp.dempsey.rvtripapp.PhoneList"> 

<ListView 
    android:layout_width="wrap_content" 
    android:layout_height="400dp" 
    android:id="@+id/listViewPhone" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" /> 

<EditText 
    android:layout_width="200dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/editText" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:editable="true" 
    android:hint="Label" /> 

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:inputType="number" 
    android:ems="10" 
    android:id="@+id/editText2" 
    android:layout_below="@+id/editText" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:hint="Phone Number" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="+" 
    android:id="@+id/button4" 
    android:textSize="40dp" 
    android:background="#44fe66" 
    android:layout_alignBottom="@+id/editText2" 
    android:layout_alignRight="@+id/listView" 
    android:layout_alignEnd="@+id/listView" /> 
</RelativeLayout> 

phone_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Text" 
    android:id="@+id/textView2" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Text" 
    android:id="@+id/textView3" /> 
</LinearLayout> 

すべてのヘルプははるかに高く評価されて、ありがとうございました。

+0

まず、http://schemas.android.com/apk/res\'\'/android "'を確認してください。あなたはそこにバックティックを持っています。第二に、あなたのListViewを 'android:background ="#ff9900 "'のような奇妙な色にして、本当に見えるようにします。 – Knossos

答えて

0

変更は

super(context,R.layout.phone_item, n); 
0

にsuperキーワードラインあなたはCustomAdapterクラスの同様にgetCountメソッドをオーバーライドしようとしたことがありますか?

0

カスタムアダプタをonCreate()の外側に設定する場合は、onCreate()の内部に設定してみます。

関連する問題