0

在我的应用程序中,我有一个包含不同项目的 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
}

谢谢

4

1 回答 1

1

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

以这个为例。在我的一个应用程序中,我使用OnItemClickListener()用于在单独的 Activity 中显示 Tweet 详细信息。这很好用。但是当用户单击ImageView同一项目中的 时,我需要显示该 Twitter 个人资料。因此ActivityOnItemClickListener()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> arrTweets. 并且TimeLineData是一个setter and getter针对单个值的 POJO 类。

如果您不需要OnItemClickListener(),请随意删除它。它不会影响OnClickListener()您在Adapter.

单击时ImageView,我使用以下方法提取当前位置的数据:arrTweets.get(position).getAuthorID()。而position是 中getView()的那个Adapter

请询问您是否对此有更多问题。

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

return vi;

更新 2:

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

if(position == 0){
    ....
}
于 2013-04-29T06:21:58.490 回答