2016-02-25 3 views
3

музыка приложение, которое является <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />, он работает на API 16, но не в API 23.Мое приложение не работает в API 23

элемент управления ListView не загружается с песнями, он показывает пустой, когда проверяется в API23, отлично работает в API16.

В API22 также работает отлично

import java.io.File; 
import java.util.ArrayList; 
import java.util.HashMap; 

import android.app.ListActivity; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.os.Environment; 
import android.view.ContextMenu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 
import android.widget.SearchView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 

public class PlayListActivity extends ListActivity { 
    // Songs list 
    public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 

    SearchView sv; 
    ListView lv; 
    SimpleAdapter adapter; 
    ArrayList<HashMap<String, String>> songsListData = new ArrayList<>(); 
    int songIndex; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.playlist); 

     sv = (SearchView)findViewById(R.id.searchView); 
     int id = sv.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); 
     TextView textView = (TextView) sv.findViewById(id); 
     textView.setTextColor(Color.WHITE); 
     textView.setHintTextColor(Color.LTGRAY); 

     SongsManager plm = new SongsManager(); 
     // get all songs from sdcard 
     this.songsList = plm.getPlayList(Environment.getExternalStorageDirectory()); 

     if(songsList!=null && songsList.size()>0) { 
      // looping through playlist 
      for (int i = 0; i < songsList.size(); i++) { 
       // creating new HashMap 
       HashMap<String, String> song = songsList.get(i); 

       // adding HashList to ArrayList 
       songsListData.add(song); 
      } 

      // Adding menuItems to ListView 
      adapter = new SimpleAdapter(this, songsListData, 
        R.layout.playlist_item, new String[]{"songTitle"}, new int[]{ 
        R.id.songTitle}); 


      setListAdapter(adapter); 

      sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
       @Override 
       public boolean onQueryTextSubmit(String query) { 
        return false; 
       } 

       @Override 
       public boolean onQueryTextChange(String newText) { 
        adapter.getFilter().filter(newText); 
        return false; 
       } 
      }); 
      // selecting single ListView item 
      lv = getListView(); 

      // register for context menu 
      registerForContextMenu(lv); 

      // listening to single listitem click 
      lv.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
             int position, long id) { 
        // getting listitem index 
        songIndex = position; 

        // Starting new intent 
        Intent in = new Intent(getApplicationContext(), 
          MainActivity.class); 
        // Sending songIndex to PlayerActivity 
        in.putExtra("songIndex", songIndex); 
        setResult(100, in); 
        // Closing PlayListView 
        finish(); 
       } 
      }); 
     } 

     sv.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(final View view, boolean hasFocus) { 
       if (hasFocus) { 
        view.postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
          imm.showSoftInput(view.findFocus(), 0); 
         } 
        }, 200); 
       } 
      } 
     }); 
    } 
    //ListView listView = (ListView)findViewById(android.R.id.list); 
    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 

     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.playlist_contextmenu,menu); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 

     switch (item.getItemId()){ 

      case R.id.delete_id: 
       songsListData.remove(info.position); 
       String path = songsList.get(info.position).get("songPath"); 
       File filepath = new File(path); 
       filepath.delete(); 
       adapter.notifyDataSetChanged(); 
       return true; 
      default: 
       return super.onContextItemSelected(item); 
     } 

    } 
} 

Даже значок уведомления не появляется, он показывает пустой значок Я использовал NotificationCompat.Builder

ListView

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <SearchView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/searchView" 
     android:background="#242424" //black colour 
     android:queryHint="Search..."> 
    </SearchView> 
    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:divider="@drawable/gradient_horizontal_line" 
     android:dividerHeight="1dp" 
     android:listSelector="@drawable/list_selector" // balck colour 
     android:background="@drawable/list_selector"/> 

</LinearLayout> 

Список экземпляров

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:gravity="center" 
    android:background="@drawable/list_selector" 
    android:foreground="#EBEBEB" 
    android:padding="5dp"> 
    <!--android:background="@drawable/list_selector"--> 
    <TextView 
     android:id="@+id/songTitle" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="16dp" 
     android:padding="10dp" 
     android:background="@drawable/list_selector" 
     android:textColor="#FFFFFF"/> // white colour 
    <!--android:color="#f3f3f3"--> 
</LinearLayout> 

list_selector

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<!-- Selector style for listrow --> 

    <item 
    android:state_selected="false" 
     android:state_pressed="false" 
     android:drawable="@drawable/gradient_bg" /> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/gradient_bg_hover" /> 
    <item android:state_selected="true" 
    android:state_pressed="false" 
     android:drawable="@drawable/gradient_bg_hover" /> 
    </selector> 

styles.xml

<resources> 

    <!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 
    </style> 

    <style name="AppTheme.NoActionBar"> 
     <item name="windowActionBar">false</item> 
     <item name="windowNoTitle">true</item> 
    </style> 

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> 

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> 

    <style name="btnStyleBlackpearl" parent="@android:style/Widget.Button"> 
     <item name="android:textSize">15sp</item> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textColor">#C4C4C4</item> 
     <item name="android:gravity">center</item> 
     <item name="android:shadowColor">#000000</item> 
     <item name="android:shadowDx">1</item> 
     <item name="android:shadowDy">1</item> 
     <item name="android:shadowRadius">0.6</item> 
     <item name="android:background">@drawable/custom_btn_black_pearl</item> 
     <item name="android:padding">10dip</item> 
    </style> 

</resources> 

пожалуйста, руководство ..

API 16 - рабочая

API 23 - не работает - после включения разрешения хранения в эмуляторе enter image description here

+0

Если вы нацеливаете API> = 21, ваши уведомления будут иметь только белый цвет. Каждый непрозрачный пиксель будет белым. Сделайте значок, который использует альфа-канал для работы с контрастом. –

+0

@ Eugen Pechanec, Даже после использования альфа-канала значок уведомления отображается только в белом цвете. – Selva

+0

Это то, что я сказал в первом предложении. Это предполагаемое поведение с Lollipop. –

ответ

0

Вы должны обращаться с разрешениями для хранения Программным в Зефир устройств.

1

Для быстрого исправления: на устройстве/эмуляторе goto Settings -> Apps -> Your App -> Permissions и удостоверьтесь, что Storage проверен. Долгое время вы хотите, чтобы ваше приложение было request permissions at run time с использованием новых API, добавленных в API 23.

+0

Я включил разрешение на хранение в эмуляторе, но немного улучшил отображение списка. Раньше это был полный черный экран, и после того, как разрешение на хранение теперь включено, в представлении списка отображается белый экран с горизонтальными элементами списка, с пустым текстом, но если я нажму на все элементы, которые воспроизводятся песни. и значок уведомления по-прежнему не отображается. см. снимок экрана выше. – Selva

+0

Проверьте цвета и стили текста. Если это один и тот же цвет между обоими скриншотами, вы просто используете белый текст на белом/светлом фоне. –

+0

Не могли бы вы разместить свой макет для элементов списка, а также ваши файлы 'styles.xml'? –

0
  • Эй, проверьте свои стили.
  • Цвет вашего списка отличается тем, что обеспечивает api-изображения.
  • Я думаю, что цвет текста элемента списка является WHITE поэтому его не видно в апи 23.
  • попытка изменить этот цвет, и я уверен, что он будет работать.

* Примечание - Пожалуйста, сохраните подобную тему на всех апи.

+0

да цвет текста белый, но я установил цвет списка элементов и списка как черный, почему он не встречается только в API 23? – Selva

0

Я думаю, что textColor белый. Таким образом, вы не можете видеть элементы строки. Вы можете изменить цвет текста и все будет хорошо работать

Goodluck!

+0

есть цвет текста белый, но я установил цвет списка элементов и списка как черный, почему он не встречается только в API 23? – Selva

+0

Проверьте цвет переднего плана в элементе списка. –

0

Я нашел проблему, это android:foreground="#EBEBEB", который является белым цветом в элементе списка линейного макета.

Смежные вопросы