2016-02-17 73 views
0

我正在創建一個Android應用程序,其中我在對話框中使用了ListView。我想改變項目的背景顏色點擊,我已經完成了這個在setOnItemClickListener的幫助下。我將所有選定的值存儲在ListArray中。我想要這樣做,如果用戶再次打開該對話框,它必須根據ListArray中的數據顯示他已經選擇的內容。確切的問題是,當我回到頁面並離開對話框時,列表得到更新並且沒有顯示選擇。如何以編程方式更改ListView的特定項目的背景Android

enter image description here

我這是怎麼顯示選定的項目。 這是代碼我已經習慣了這樣做...

listJobs.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
       selectedJob = a.getItemAtPosition(position).toString(); 
       if (!arraySelectedJobs.contains(selectedJob)) { 
        a.getChildAt(position).setBackgroundColor(YELLOW); 
        arraySelectedJobs.add(selectedJob); 
        Log.e("position", String.valueOf(position)); 
       } else { 
        a.getChildAt(position).setBackgroundColor(Color.WHITE); 
        arraySelectedJobs.remove(selectedJob); 
       } 

       Log.e("data", arraySelectedJobs.toString()); 

      } 
     }); 

我想,當用戶再次打開該對話框顯示所選項目。

listJobs = (ListView) Jobs.findViewById(R.id.listJobs123456); 
      button_ok = (Button) Jobs.findViewById(R.id.ButtonOk); 
      button_ok.setOnClickListener(this); 
      jobListViewAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, arrayListJobs); 
      listJobs.setAdapter(jobListViewAdapter); 
      if(!arraySelectedJobs.isEmpty()) 
      { 
       for(int i=0;i<arraySelectedJobs.size();i++) 
       { 
        try 
        { 
         int value = arrayListJobs.indexOf(arraySelectedJobs.get(i)); 
         listJobs .getChildAt(value).setBackgroundColor(YELLOW); 

        } 
        catch(Exception ex) 
        { 
         Log.e("error",ex.toString()); 
        } 
       } 
      } 

我正在此錯誤

顯示java.lang.NullPointerException:嘗試上的空對象引用調用虛擬方法 '無效 android.view.View.setBackgroundColor(int)的'

如何解決這個問題。

+0

錯誤的情景發生,當你選擇任何工作然後離開對話框,然後再次打開它糾正我,如果我錯了 – Dhiraj

+0

是你的代碼,而無需離開對話框博工作X? – Dhiraj

+0

是工作正常,不離開對話框 您正確理解 –

回答

1

您需要創建自定義列表視圖的方法和使用下面的代碼,當你顯示你的對話框

 final Dialog dialogOne = new Dialog(MainActivity.this); 
     dialogOne.requestWindowFeature(Window.FEATURE_NO_TITLE); 
            dialogOne.setContentView(R.layout.dialog_xml); 
            CustomList adapter = new 
              CustomList(MainActivity.this,arraySelectedJobs); 
            list = (ListView) dialogOne.findViewById(R.id.list); 
            list.setAdapter(adapter); 

            list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 


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

              parent.getChildAt(position).setBackgroundColor(Color.YELLOW); 
              arraySelectedJobs.add(String.valueOf(position)); 

             } 
            }); 
            dialogOne.show(); 

現在,在你爲特定列表行你 需要編寫返回查看自定義列表類下面的代碼getview方法

LayoutInflater inflater = context.getLayoutInflater(); 
          View rowView = inflater.inflate(R.layout.list_single, null, true); 
         if (!arraySelectedJobs.isEmpty()) { 
           for (int i = 0; i < arraySelectedJobs.size(); i++) { 
            int j = Integer.parseInt(arraySelectedJobs.get(i)); 
            if (position == j) { 
             rowView.setBackgroundColor(Color.YELLOW); 
            } 
           } 
          } 
+0

謝謝我會盡力讓你知道 –

+0

@pritishjoshi這是對我的工作.... – Dhiraj

+0

@pritishjoshi是否正在工作? – Dhiraj

相關問題