1

以下のコードでは、songsManager オブジェクトが作成され、なぜ this.songsList が曲ファイルの保存に使用され、songList だけが使用されないのかが分かります。主な質問は、これが何に使用され、正確には何に使用され、いつ使用されるのかということです。私の主な疑問は、ここでは他のsongListが宣言されていないため、songListが衝突する可能性がないため、現在のクラスで宣言されているsongListとして具体的に参照する理由です。主に、クラス内で宣言されたオブジェクトまたは変数の名前と同じ名前の関数に引数が渡される場合に使用します。これにより、混乱を避け、コンパイラーに、そのクラスで宣言されたオブジェクトではなく、そのクラスで宣言されたオブジェクトを使用することを伝えます。引数として渡されました。これを使用しました。間違っている場合は訂正し、これに関する知識を追加してください。

関心のあるコード行の後に // が続きます。

public class CustomizedListView extends Activity{

private int currentIndex;
private String[] menuItems = {"Play","Share Music Via","Details"};
private LinkedList<File> songsList = new LinkedList<File>();//
private ArrayList<HashMap<String, String>> songsListdata = new ArrayList<HashMap<String, String>>();
private MediaMetadataRetriever mmr = new MediaMetadataRetriever();
private Utilities utils=new Utilities();
ListView list=null;
ModifiedAdapter adapter=null;
SongsManager plm=null;//
Button search;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.playlist);

    plm = new SongsManager();//
    File extStore = Environment.getExternalStorageDirectory();
    // get all songs from sdcard
    this.songsList = plm.getFilesInFolder(extStore);//
    for (int i = 0; i < songsList.size(); i++) {
        // creating new HashMap
        HashMap<String, String> song = new HashMap<String, String>();
        mmr.setDataSource(songsList.get(i).getAbsolutePath().toString());

        //getting artist
        String artist = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST);
        if(artist==null)
            artist=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);

        //getting Duration
        String len = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);

        long Len=0;
        try
        {
            Len=Integer.parseInt(len);
        }
        catch(Exception e)
        {
            Log.i(null, ":conversion error");
        }
        len=utils.milliSecondsToTimer(Len);
        Log.i(null, "length"+len);
        song.put("songTitle", (songsList.get(i)).getName().substring(0, ((songsList.get(i)).getName().length() - 4)));
        song.put("songArtist", artist);
        song.put("duration", len);
        song.put("songPath",songsList.get(i).getAbsolutePath().toString());
        // adding HashList to ArrayList
        songsListdata.add(song);
    }

    list=(ListView)findViewById(R.id.list);
    // Getting adapter by passing xml data ArrayList
    adapter=new ModifiedAdapter(this, songsListdata);
    list.setAdapter(adapter);
    // Click event for single list row
    list.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                final int position, long id) {

            final String songPath =songsList.get(position).getAbsolutePath().toString();
            AlertDialog.Builder builder = new AlertDialog.Builder(CustomizedListView.this);
            builder.setTitle((songsList.get(position)).getName().substring(0, ((songsList.get(position)).getName().length() - 4)));
            builder.setItems(menuItems, new DialogInterface.OnClickListener()
             {

                    public void onClick(DialogInterface dialog, int item)
                    {  

                        if(item==0)
                        {
                            Intent in = new Intent(getApplicationContext(),MainActivity.class);
                            // Sending songIndex to PlayerActivity
                            in.putExtra("songIndex", position);
                            setResult(100, in);
                            // Closing PlayListView
                            finish();
                        }
                        else if(item==2)
                        {
                            Intent details = new Intent(getApplicationContext(),Details.class);
                            details.putExtra("songPath", songPath);
                            startActivity(details);
                        }
                        else if(item==1)
                        {
                            Intent intent = new Intent();  
                            intent.setAction(Intent.ACTION_SEND);  
                            intent.setType("audio/*");
                            intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(songPath)));
                            startActivity(intent);
                        }
                    }
             });
            AlertDialog alert = builder.create();
            alert.show();
        }
    });

    //Search for a song implementations
    search=(Button)findViewById(R.id.searchForSong);
    search.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent launchBrowser=new Intent(getApplicationContext(), Browser.class);
            startActivity(launchBrowser);
        }
    });
}

}

4

2 に答える 2

1

実際、この答えはいくつかのステップで壊れているはずです

1

この演算子

それが使用されている現在のオブジェクト/スコープを参照します

例:ボタンリスナーがこのように作られているとしましょう

new button(context).setOnClickListener(new View.onClickListener(public void onClick(View v){ //ここでこれを使用して、この onclicklistener を参照します

});

// コンストラクターの場合

public classname(int arg1){ //したがって、yur クラスの arg1 をこの arg1 で初期化します

// わかりやすくするために、 this.arg1=arg1; と記述します。

}

2

ここでソングリストと一緒に使用されているこれは冗長であり、競合がないため重要ではありません。

これがお役に立てば幸いです。

于 2013-06-07T14:12:29.787 に答える