0

初めて質問するので、問題を解決してください。私は小さな音楽プレーヤーアプリを開発しています。ばかげた問題に直面しているという点で、Googleでよく検索しましたが、それでもそうです。

リストフラグメントを使用して曲のリストを表示しています。問題は、リスト項目の背景を透明に設定すると機能することです。しかし、リストをスクロールするとすぐに、リストの背景がシステムのデフォルトの背景に変わります。

私はアンドロイドに慣れていないので、助けてください...

私はすでにレイアウトファイルでこれらを試しました:

android:background="@android:color/transparent"
android:cacheColorHint="#00000000"

私の主な活動コードは次のとおりです。

    package com.android.player;

    import in.wptrafficanalyzer.viewpagerdemo.R;
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.view.ViewPager;
    import android.view.Menu;

    public class MainActivity extends FragmentActivity {

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

        /** Getting a reference to the ViewPager defined the layout file */        
        ViewPager pager = (ViewPager) findViewById(R.id.pager);

        /** Getting fragment manager */
        FragmentManager fm = getSupportFragmentManager();

        /** Instantiating FragmentPagerAdapter */
        MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm);

        /** Setting the pagerAdapter to the pager object */
        pager.setAdapter(pagerAdapter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

/ * ** * ** * ** * ** * ** * ** * ** * ** * ** * *** SongsList.java のコードは次のとおりです。

    package com.android.player;

    import in.wptrafficanalyzer.viewpagerdemo.R;

    import java.io.FileDescriptor;
    import java.math.BigDecimal;

    import android.content.ContentUris;
    import android.content.Context;
    import android.database.Cursor;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.ParcelFileDescriptor;
    import android.provider.MediaStore;
    import android.support.v4.app.ListFragment;
    import android.support.v4.widget.SimpleCursorAdapter;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.TextView;


    public class SongsList extends ListFragment{

    int mCurrentPage;
    private MediaCursorAdapter mediaAdapter = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /** Getting the arguments to the Bundle object */
        Bundle data = getArguments();

        /** Getting integer data of the key current_page from the bundle */
        mCurrentPage = data.getInt("current_page", 0);
        String sortOrder = MediaStore.MediaColumns.DISPLAY_NAME + " ASC";
        Cursor cursor = getActivity().getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,sortOrder);

        if(null != cursor)
        {
            mediaAdapter = new MediaCursorAdapter(getActivity(), R.layout.listitem, cursor);  
            setListAdapter(mediaAdapter);
        }

    }

    public Bitmap getAlbumart(Long album_id) 
    {
         Bitmap bm = null;
         try 
         {
             final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
             //album_id = ()album_id;
             Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id);

             ParcelFileDescriptor pfd = getActivity().getContentResolver().openFileDescriptor(uri, "r");

             if (pfd != null) 
             {
                 FileDescriptor fd = pfd.getFileDescriptor();
                 bm = BitmapFactory.decodeFileDescriptor(fd);
             }
         } catch (Exception e) {
         }
         return bm;
    }
    public class MediaCursorAdapter extends SimpleCursorAdapter{

        @SuppressWarnings("deprecation")
        public MediaCursorAdapter(Context context, int layout, Cursor c) {
                super(context, layout, c,new String[] { MediaStore.MediaColumns.DISPLAY_NAME, MediaStore.MediaColumns.TITLE, MediaStore.Audio.AudioColumns.DURATION},
                                new int[] { R.id.displayname, R.id.title, R.id.duration });
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {
                TextView title = (TextView)view.findViewById(R.id.title);
                TextView name = (TextView)view.findViewById(R.id.displayname);
                TextView duration = (TextView)view.findViewById(R.id.duration);
                ImageView imageView1 = (ImageView)view.findViewById(R.id.imageView1);

                Bitmap bm = getAlbumart(cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM_ID)));

                if(bm!=null)
                {
                    imageView1.setImageBitmap(bm);
                }
                else
                {
                    imageView1.setImageResource(R.drawable.ic_launcher);
                }

                name.setText(cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME)));

                title.setText(cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.TITLE)));

                long durationInMs = Long.parseLong(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DURATION)));

                int seconds = (int) (durationInMs / 1000) % 60 ;
                int minutes = (int) ((durationInMs / (1000*60)) % 60);
                int hours   = (int) ((durationInMs / (1000*60*60)) % 24);
                double durationInMin = ((double)durationInMs/1000.0)/60.0;
                 String durationTxt = "";
                if(hours==0)
                {
                 if(minutes<10)
                 {
                     durationTxt = "0"+minutes+":"+seconds;
                 }
                 else
                 {
                     durationTxt = minutes+":"+seconds;
                 }
                }
                else
                {
                    durationTxt = hours+":"+"0"+minutes+":"+seconds;
                }
                durationInMin = new BigDecimal(Double.toString(durationInMin)).setScale(2, BigDecimal.ROUND_UP).doubleValue();

                duration.setText(durationTxt);

                view.setTag(cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA)));
        }

    }

    public void onActivityCreated(View view, Bundle savedInstanceState) {

        getListView().setCacheColorHint(android.R.color.transparent);
        super.onViewCreated(view, savedInstanceState);
    }

}

/ * ** * ** * ** * ** * ** * ** * ** * ** * **

ここに activity_mail.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" >

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/sparkle">

        <android.support.v4.view.PagerTitleStrip
            android:id="@+id/pager_title_strip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:background="#33b5e5"
            android:textColor="#fff"
            android:paddingTop="4dp"
            android:paddingBottom="4dp" />

    </android.support.v4.view.ViewPager>

</RelativeLayout>

/ * ** * ** * ** * ** * ** * ** * ** * ** * ** * * listitem.xml は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:cacheColorHint="#00000000"
    android:orientation="horizontal"
    android:padding="5dip"
    android:id="@+id/list_item" >

    <!--  ListRow Left sied Thumbnail image -->
    <LinearLayout android:id="@+id/thumbnail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="3dip"
        android:layout_alignParentLeft="true"
        android:background="@drawable/transparent_bg"
        android:cacheColorHint="#00000000"
        android:layout_marginRight="5dip">

        <ImageView
             android:id="@+id/imageView1"
            android:layout_width="60dip"
            android:layout_height="60dip"
            android:src="@drawable/ic_launcher"/>

    </LinearLayout>

    <!-- Title Of Song-->
    <TextView
        android:id="@+id/displayname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/thumbnail"
        android:layout_toRightOf="@+id/thumbnail"
        android:textColor="#fff"
        android:typeface="sans"
        android:textSize="15dip"
        android:textStyle="bold"/>

    <!-- Artist Name -->
    <TextView
        android:id="@+id/title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/displayname"
        android:textColor="#fff"
        android:textSize="10dip"
        android:layout_marginTop="1dip"
        android:layout_toRightOf="@+id/thumbnail"
        android:singleLine="true" />

    <!-- Rightend Duration -->
    <TextView
        android:id="@+id/duration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/displayname"
        android:gravity="right"
        android:layout_marginRight="5dip"
        android:textSize="12dip"
        android:textColor="#fff"
        android:textStyle="bold"/>


</RelativeLayout>

ぜひご覧いただき、お役立てください。前もって感謝します。

4

1 に答える 1

0

android:cacheColorHintは本当に解決策ですが、間違った場所に置いています。これは の属性でありListView、リスト アイテムの属性ではありません。

これはうまくいくはずです:

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:cacheColorHint="#00000000" />

更新しました:

あなたのコードをもう一度見たところ、次の行が見つかりました。

getListView().setCacheColorHint(android.R.color.transparent);

android.R.color.transparent単なる参照であり、実際の色の値ではないため、間違っています。

また、 にはonActivityCreated(View view, Bundle savedInstanceState)メソッドがありませんListFragment。これはonActivityCreated(Bundle savedInstanceState)実際です。次のコードに置き換えてみてください。うまく機能するはずです。

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);  
    getListView().setCacheColorHint(Color.TRANSPARENT);
}
于 2013-01-12T11:22:51.273 に答える