ListView setOnItemClickListener针对特定项目的操作

时间:2013-04-29 01:41:36

标签: android android-listview

在我的应用中,我有一个包含不同项目的ListView。我遇到的问题是我想对每个特定项目执行监听器或操作。现在,当你按下一个项目时我有的代码,它将它应用于所有项目而不是具体的项目。

我想要做的是在按下特定项目时流式传输视频。

这是我的代码:

public class MainActivity extends Activity {


private ListView listView1;

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

    ViedoStream viedoStream_data[] = new ViedoStream[]
    {
        new ViedoStream(R.drawable.image0, "Mission TV"),
        new ViedoStream(R.drawable.image1, "HCBN Philippines"),
        new ViedoStream(R.drawable.image2, "Global Family Network"),
        new ViedoStream(R.drawable.image3, "2CBN"),
        new ViedoStream(R.drawable.image4, "Red ADvenir"),
        new ViedoStream(R.drawable.image5, "Alfa Television"),
        new ViedoStream(R.drawable.image6, "Light Channel Hungary"),
        new ViedoStream(R.drawable.image7, "Light Channel Rumania"),
        new ViedoStream(R.drawable.image8, "Light Channel Germany"),
        new ViedoStream(R.drawable.image9, "Terceiro Anjo"),
        new ViedoStream(R.drawable.image10, "HCBN Indonesia"),
        new ViedoStream(R.drawable.image11, "TV Famille")
    };

    ViedoStreamAdapter adapter = new ViedoStreamAdapter(this, 
            R.layout.listview_item_row, viedoStream_data);


    listView1 = (ListView)findViewById(R.id.listView1);

    View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
    listView1.addHeaderView(header);

    listView1.setAdapter(adapter);

    listView1.setOnItemClickListener(new OnItemClickListener() {

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

    //  Place code here with the action: RIGHT NOW I HAVE A TOAST FOR EXAMPLE ONLY

            Toast.makeText(getApplicationContext(), "TV Selected", Toast.LENGTH_SHORT).show();


        }
   });

}}

如您所见,当选择某个项目时,Toast将应用于ListView上的每个项目。请注意Toast只是我正在使用的一个例子。我想改为传输http视频。现在,我该如何做到这一点,以便每次选择一个项目时,它只对该特定项目执行操作?

我为iPhone编程并且我是所有这些的新手......在iPhone中,我就是这样做的。 *这只是逻辑运算的一个例子:

if (item == @"TV Item" { 
  //Do Action
}

由于

1 个答案:

答案 0 :(得分:1)

OnItemClickListener()适用于所有ListView's项目,如果您希望将控件传递给特定Widgets,那么您可以将它们设置为各自的OnClickListener()方法。这需要在Adapter中完成。在您的情况下,ViedoStreamAdapter

以此为例。在我的应用程序中,我使用OnItemClickListener()在单独的活动中显示推文详细信息。这很好。但是当用户点击同一项目中的ImageView时,我需要显示Twitter个人资料。因此,在Activity中,我使用了OnItemClickListener(),在适配器中,我覆盖了ImageView's OnClickListener()。像这样:

更新后的代码:

holder.imgvwProfilePicture.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

        Intent profileIntent = new Intent(activity, ProfileContainer.class);
        profileIntent.putExtra("userId", arrTweets.get(position).getAuthorID());
        profileIntent.putExtra("userScreenName", arrTweets.get(position).getScreenName());
        activity.startActivity(profileIntent);

    }
});

在这种情况下,我有ArrayAdapter<TimeLineData> arrTweetsTimeLineData是一个POJO类,对于单个值是setter and getter

如果您不需要OnItemClickListener(),请随时将其删除。它不会影响您在OnClickListener()中设置的Adapter

点击ImageView后,我会使用以下内容提取当前位置的数据:arrTweets.get(position).getAuthorID()positiongetView()的{​​{1}}中的一个。

请问您是否对此有更多疑问。

注意:这应该在您返回Adapter中的View实例之前完成。例如,上面的代码在我的应用程序之前调用:

getView()

更新2:

正如OP在评论中指出的那样,这对他有用:

return vi;