0

私はアンドロイドが初めてです。Web を検索したところ、デバイスに保存されているすべての連絡先をリスト ビューで表示する単純なアレイ アダプターの作成方法を見つけました。バックグラウンドで実行するように依頼されるまで、コードは正常に実行されていました。

コードを更新して AsyncTask で実行すると、リスト ビューの項目が背景色としてデフォルトの白色で追加され、項目をクリックすると行に何が書かれているかを確認できます。

 public class MainActivity extends Activity {

    ListView lv;
    ArrayAdapter<String> adapter;
    public String num1;
    ArrayList<String> arr = new ArrayList<String>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv=(ListView) findViewById(R.id.listView1);
        progress=(ProgressBar) findViewById(R.id.progressBar1);

        new background().execute();
    public class background extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            displayContacts();
            return "success";
        }
        @Override
        protected void onPostExecute(String result) {
          Toast.makeText(getApplicationContext(), "Connection successfull "+result, Toast.LENGTH_SHORT).show();
          String [] values=arr.toArray(new String[arr.size()]);
            adapter = new ArrayAdapter<String>(getApplicationContext(),
                    android.R.layout.simple_list_item_1, android.R.id.text1, values);

            // Assign adapter to ListView
            lv.setAdapter(adapter);
            lv.setOnItemClickListener(new OnItemClickListener() {

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

                      // ListView Clicked item value
                      String  itemValue    = (String) lv.getItemAtPosition(position);

                       // Show Alert 
                       Toast.makeText(getApplicationContext(),
                         "Position :"+itemPosition+"  ListItem : " +itemValue , Toast.LENGTH_LONG)
                         .show();
                     }

            }); 

            registerForContextMenu(lv);
            progress.setVisibility(View.GONE);
        }

    }
    @Override
      public void onCreateContextMenu(ContextMenu menu, View v,
              ContextMenuInfo menuInfo) {

          super.onCreateContextMenu(menu, v, menuInfo);
          AdapterContextMenuInfo aInfo = (AdapterContextMenuInfo) menuInfo;

          // We know that each row in the adapter is a Map
          String num= adapter.getItem(aInfo.position);
          this.num1=num;
          menu.setHeaderTitle("Options for " + num);
          menu.add(1, 1, 1, "Send ");
          menu.add(1, 2, 2, "Delete");

      }

    public boolean onContextItemSelected(MenuItem item) {
        int itemId = item.getItemId();
        // Implements our logic
        // Toast.makeText(this, "Item id ["+itemId+"]",
        // Toast.LENGTH_SHORT).show();
        if (itemId == 1) {
            Toast.makeText(this, "number is:"+this.num1, Toast.LENGTH_LONG).show();
        }
        return true;
    }
    private void displayContacts() {
            ContentResolver cr = getContentResolver();
            Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                    null, null, null, null);
            if (cur.getCount() > 0) {
                while (cur.moveToNext()) {
                    String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                    String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    if (Integer.parseInt(cur.getString(
                            cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                         Cursor pCur = cr.query(
                                 ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                                 null, 
                                 ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                                 new String[]{id}, null);
                         while (pCur.moveToNext()) {
                             String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    //                       Toast.makeText(this, "Name: " + name + ", Phone No: " + phoneNo, Toast.LENGTH_LONG).show();
                             arr.add(phoneNo);
                         } 
                    pCur.close();
                }
                }
            }
        }

displayContacts() は、リスト ビューに表示するために使用される ArrayList arr にすべての連絡先を追加します。

リストビューアイテムのテキストの色を変更することを検索して実行しましたが、テキストの色はまだ変更されていません。リスト項目行のみ背景色を変更できました。

次の図は、リスト ビューで 6 つのアイテムが作成されている様子を示していますが、背景は白色で、クリックされたアイテムはアイテム行内のテキストを示しています。

リスト ビューの 6 項目を示すイメージ

activity_main.xml コードは次のとおりです。

<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"
tools:context=".MainActivity" >

<ListView
    android:id="@+id/listView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true" />

<ProgressBar
    android:id="@+id/progressBar1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true" />

</RelativeLayout>
4

1 に答える 1

0

リスト ビューにはカスタム アダプタを使用する必要があります。これが、リスト ビューのスタイルを希望どおりに設定する方法です。名前などの他の情報にテキストビューを追加することもできます。各要素に異なる色を割り当てます。

迅速な解決策については、カスタム アダプターに関する次の質問と回答を確認してください。 リスト ビュー用のカスタム アダプター

幸運を。

于 2013-09-26T19:26:24.253 に答える