如何在单击列表视图时调用另一个活动

时间:2016-10-03 08:41:03

标签: android listview android-activity

列出从外部存储中读取的所有歌曲。点击一首歌后,它应该转到SecondActivity.java

MainActivity.java

public class MainActivity extends ListActivity {
    public final static String EXTRA_MESSAGE = "com.example.shubham.hymnattune";
    private List peers = new ArrayList();
    private MainActivity.MediaCursorAdapter mediaAdapter = null;
    private String currentFile = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
        if (null != cursor) {
            cursor.moveToFirst();
        }
}

  @Override
    protected void onListItemClick(ListView list, View view, int position, long id) {
        super.onListItemClick(list, view, position, id);

        currentFile = (String) view.getTag();
        Intent intent=new Intent(this,SecondActivity.class);
        intent.putExtra(EXTRA_MESSAGE,currentFile);
        startActivity(intent);

     }

    private class MediaCursorAdapter extends SimpleCursorAdapter {

        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);

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

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

            double durationInMin = ((double) duratioInMs / 1000.0) / 60.0;

            durationInMin = new BigDecimal(Double.toString(durationInMin)).setScale(2, BigDecimal.ROUND_UP).doubleValue();

            duration.setText("" + durationInMin);

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

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            LayoutInflater inflator = LayoutInflater.from(context);

            View v = inflator.inflate(R.layout.listitem, parent, false);
            bindView(v, context, cursor);
            return v;
        }
    }
};

接收在MainActivity.java中选择的歌曲并播放。

SecondActivity.java

public class SecondActivity extends AppCompatActivity {

    private static final int UPDATE_FREQUENCY = 500;
    private static final int STEP_VALUE = 4000;


    //private MainActivity.MediaCursorAdapter mediaAdapter = null;
    private TextView selectedFile = null;
    private SeekBar seekBar = null;
    private MediaPlayer player = null;
    private ImageButton playButton = null;
    private ImageButton prevButton = null;
    private ImageButton nextButton = null;

    private boolean isStarted = true;
    private String currentFile = "";
    private boolean isMoveingSeekBar = false;

    private final Handler handler = new Handler();
    //  private final IntentFilter intentFilter = new IntentFilter();

    private final Runnable updatePositionRunnable = new Runnable() {
        public void run() {
            updatePosition();
        }
    };
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.second);

        selectedFile = (TextView) (findViewById(R.id.selectedfile));
        seekBar = (SeekBar) (findViewById(R.id.seekbar));
        playButton = (ImageButton) (findViewById(R.id.play));
        prevButton = (ImageButton) (findViewById(R.id.prev));
        nextButton = (ImageButton) (findViewById(R.id.next));

        player = new MediaPlayer();

        player.setOnCompletionListener(onCompletion);
        player.setOnErrorListener(onError);
        seekBar.setOnSeekBarChangeListener(seekBarChanged);

        Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);

        if (null != cursor) {
            cursor.moveToFirst();

            playButton.setOnClickListener(onButtonClick);
            prevButton.setOnClickListener(onButtonClick);
            nextButton.setOnClickListener(onButtonClick);
        }

        Intent intent=getIntent();
        currentFile=intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
        startPlay(currentFile);

    }


This is my main layout file. containing a list of songs from external storage.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.example.shubham.hymnattune.MainActivity">

    <ListView
           android:id="@android:id/list"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_weight="1.0"/>
</LinearLayout>

这是我用于播放歌曲的第二个活动的xml文件。     second.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.example.shubham.hymnattune.SecondActivity">


<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp"
        android:background="@android:drawable/screen_background_light"
        android:id="@+id/linear2"
        android:layout_alignParentStart="true">

        <TextView
            android:id="@+id/selectedfile"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:ellipsize="middle"
            android:gravity="center_horizontal"
            android:singleLine="true"
            android:text="No File Selected"
            android:textColor="@android:color/black" />

        <SeekBar
            android:id="@+id/seekbar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:max="100"
            android:paddingBottom="10dp"/>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@android:drawable/screen_background_light"
            android:gravity="center"
            android:orientation="horizontal">

            <ImageButton
                android:id="@+id/prev"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@android:drawable/ic_media_previous"/>

            <ImageButton
                android:id="@+id/play"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@android:drawable/ic_media_play"/>

            <ImageButton
                android:id="@+id/next"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@android:drawable/ic_media_next"/>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

2 个答案:

答案 0 :(得分:0)

试试这个

 ListView list  = (ListView) findViewById(R.id.list);
list.setOnItemClickListener(new AdapterView.onItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
   Intent intent=new Intent(this,SecondActivity.class);
   startActivity(intent);
 } 
 });

答案 1 :(得分:0)

我在我的适配器类中使用了一个代码来实现项目点击..检查此代码

public class LazyAdapter extends BaseAdapter {

private VideoActivity mainactivity;
private String[] result,imageId,title;
private static LayoutInflater inflater=null;

Context context;

public LazyAdapter(VideoActivity mainactivity, String[] videourls, String[] imgurls, String [] explist) {
    context = mainactivity;
    result = videourls;
    imageId=imgurls;
    title = explist;
    inflater = (LayoutInflater)mainactivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   // imageLoader=new ImageLoader(mainactivity.getApplicationContext());
}

public int getCount() {
    return title.length;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}


public class Holder
{
    TextView tv;
    ImageView img;
}

public View getView(final int position, final View convertView, ViewGroup parent) {

    Holder holder=new Holder();
    View rowView;
    rowView = inflater.inflate(R.layout.listview, null);
    holder.tv=(TextView) rowView.findViewById(R.id.textView1);
    holder.img=(ImageView) rowView.findViewById(R.id.imageView1);
    Glide.with(context)
            .load(imageId[position])
            .into(holder.img);

    holder.tv.setText(title[position]);
   // imageLoader.DisplayImage(result[position], holder.img);
    rowView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
           // Toast.makeText(context, "You Clicked "+title[position], Toast.LENGTH_LONG).show();

           Intent intent = new Intent(context, VideoActivity2.class);
            intent.putExtra("imgid",title[position]);
            intent.putExtra("videourl",result[position]);
            context.startActivity(intent);

        }
    });
    return rowView;
}

}

在此代码中,我还添加了一个代码,用于在单击列表视图中的每个项目时传递数据。希望这个可以帮助您