Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 阵列适配器项的背景颜色相同_Android_Android Listview_Android Arrayadapter - Fatal编程技术网

Android 阵列适配器项的背景颜色相同

Android 阵列适配器项的背景颜色相同,android,android-listview,android-arrayadapter,Android,Android Listview,Android Arrayadapter,我是android新手。 我在网上搜索了一下,找到了如何制作一个简单的数组适配器,它可以在列表视图中显示设备上保存的所有联系人。 在我被要求在后台执行之前,代码一直运行良好 当我更新代码以在AsyncTask中执行此操作时,列表视图中的项将添加一个defalut白色作为背景色,当您单击该项时,您可以看到行中写入的内容 public class MainActivity extends Activity { ListView lv; ArrayAdapter<String

我是android新手。 我在网上搜索了一下,找到了如何制作一个简单的数组适配器,它可以在列表视图中显示设备上保存的所有联系人。 在我被要求在后台执行之前,代码一直运行良好

当我更新代码以在AsyncTask中执行此操作时,列表视图中的项将添加一个defalut白色作为背景色,当您单击该项时,您可以看到行中写入的内容

 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();
                }
                }
            }
        }
公共类MainActivity扩展活动{
ListView lv;
阵列适配器;
公共字符串num1;
ArrayList arr=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listView1);
进度=(ProgressBar)findViewById(R.id.progressBar1);
新建背景().execute();
公共类后台任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
//TODO自动生成的方法存根
显示联系人();
返回“成功”;
}
@凌驾
受保护的void onPostExecute(字符串结果){
Toast.makeText(getApplicationContext(),“连接成功”+结果,Toast.LENGTH_SHORT).show();
字符串[]值=arr.toArray(新字符串[arr.size()]);
适配器=新的ArrayAdapter(getApplicationContext(),
android.R.layout.simple_list_item_1,android.R.id.text1,值);
//将适配器分配给ListView
低压设置适配器(适配器);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//ListView单击的项目索引
int itemPosition=位置;
//ListView单击的项目值
String itemValue=(String)lv.getItemAtPosition(position);
//显示警惕
Toast.makeText(getApplicationContext(),
位置:“+itemPosition+”列表项:“+itemValue,Toast.LENGTH\u LONG)
.show();
}
}); 
registerForContextMenu(lv);
progress.setVisibility(View.GONE);
}
}
@凌驾
public void onCreateContextMenu(ContextMenu,视图v,
上下文菜单信息(menuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
AdapterContextMenuInfo aInfo=(AdapterContextMenuInfo)菜单信息;
//我们知道适配器中的每一行都是一个映射
String num=adapter.getItem(aInfo.position);
这个.num1=num;
menu.setHeaderTitle(“选项”+num);
菜单。添加(1,1,1,“发送”);
菜单。添加(1、2、2,“删除”);
}
公共布尔值onContextItemSelected(MenuItem项){
int itemId=item.getItemId();
//实现我们的逻辑
//Toast.makeText(此“项目id[”+itemId+“]),
//吐司。长度(短)。show();
if(itemId==1){
Toast.makeText(这个,“数字是:”+this.num1,Toast.LENGTH_LONG.show();
}
返回true;
}
私有联系人(){
ContentResolver cr=getContentResolver();
Cursor cur=cr.query(Contacts contract.Contacts.CONTENT\u URI,
空,空,空,空);
如果(cur.getCount()>0){
while(cur.moveToNext()){
字符串id=cur.getString(cur.getColumnIndex(ContactsContract.Contacts._id));
字符串名称=cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_name));
if(Integer.parseInt(cur.getString(
cur.getColumnIndex(Contacts.Contacts.HAS_PHONE_NUMBER))>0){
游标pCur=cr.query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,
无效的
ContactsContract.CommonDataTypes.Phone.CONTACT_ID+“=?”,
新字符串[]{id},null);
while(pCur.moveToNext()){
String phoneNo=pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
//Toast.makeText(这个,“Name:+Name+”,电话号码:+phoneNo,Toast.LENGTH_LONG).show();
arr.add(电话号码);
} 
pCur.close();
}
}
}
}
displayContacts()将所有联系人添加到ArrayList arr中,该arr将用于在列表视图中显示

我搜索并更改了列表视图项的文本颜色,但仍然没有更改文本颜色。我只能更改列表项行的背景颜色

下面的图片显示了如何在列表视图中创建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>

您需要为列表视图使用自定义适配器。这就是您根据需要设置列表视图样式的方式。您还可以为名称等其他信息添加更多文本视图。并为每个元素指定不同的颜色

有关快速解决方案,请检查以下有关自定义适配器的问答:


祝你好运。

你的应用程序主题有没有可能是“暗”主题(或默认为暗主题)?只是因为你正在向适配器提供应用程序上下文而问这个问题。如果适配器所在的活动