【问题标题】:click event on list view in fragments片段中列表视图上的单击事件
【发布时间】:2013-09-04 20:59:13
【问题描述】:

我在片段中有一个列表视图,我想感知单击列表视图,以便我可以更改布局但我的代码不起作用。 我的 xml 布局是:

   <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent" >


  <ListView
      android:id="@android:id/list"
      android:layout_width="match_parent"
      android:layout_height="match_parent" >

  </ListView>

        </FrameLayout>

我的代码是:

ListView lists=(ListView)rootView.findViewById(android.R.id.list);

     lists.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {  
           public void onItemSelected(AdapterView parentView, View childView, 
                                                                 int position, long id) 
           {  
             //  setDetail(position);  
               Toast.makeText(getActivity().getApplicationContext(), "Yea!!! click ho gae called", Toast.LENGTH_SHORT).show();
           }

           public void onNothingSelected(AdapterView parentView) {  



           }  
        });

但是这段代码什么也没做,请帮我整理一下,谢谢..

【问题讨论】:

  • @gunar 是的,我正在使用数据库中的数据填充它。

标签: android xml android-layout listview android-fragments


【解决方案1】:

首先,我假设您正在使用一些数据填充列表。

其次,您调用了错误的方法,因为通常会调用 setOnItemSelectedListener 从列表中选择数据(最好的例子是微调器选择)。你应该打电话给setOnItemClickListener(盲编码):

lists.setOnItemClickListener(new AdapterView.OnItemClickListener() {  
           public void onItemClick(AdapterView<?> parent, View view, int position, long id)
           {  
             //  setDetail(position);  
               Toast.makeText(getActivity().getApplicationContext(), "Yea!!! click ho gae called", Toast.LENGTH_SHORT).show();
           }

        });

【讨论】:

  • 然后显示您是如何填充数据的。你用的是什么适配器?是自定义的还是 ArrayAdapter?
  • 我正在使用这样的数组适配器: 1-ArrayAdapter adapter = (ArrayAdapter) getListAdapter(); 2-adapter.add(message);
  • ...您在 UI 中看到了该数据?
  • 是的,所有数据都可以正确看到并添加到列表中,
  • 我将从example that works 构建一个单独的列表视图,然后将代码调整为您当前拥有的。如果不透露更多代码,几乎不可能知道问题出在哪里。
【解决方案2】:

你必须使用 ListFragment 的 onListItemClick 方法。

所以将该代码添加到您的 ListFragment 类中:

public void onListItemClick (ListView l, View v, int position, long id) {
    //Do what you need
}

【讨论】:

    【解决方案3】:

    把这个放到你的代码中:

    YOUR_LIST_VIEW.setOnItemClickListener(new AdapterView.OnItemClickListener()     {  
           public void onItemClick(AdapterView<?> parent, View view, int position, long id)
           {  
    
               Toast.makeText(getActivity().getApplicationContext(), "I was clicked", Toast.LENGTH_SHORT).show();
           }
    
        });
    

    【讨论】:

      【解决方案4】:

      你错误地实现了你的 xml 布局,因为它必须只包含在运行时必须放置默认片段列表视图的框架布局。如果您需要任何进一步的帮助或代码 sn-p,请回复我。

      【讨论】:

        【解决方案5】:

        1.像这样修改你的适配器代码。

        ListView lists=(ListView)rootView.findViewById(android.R.id.list);
        
         lists.setOnItemSelectedListener(your fragment instance);
        

        您不需要在适配器中实现 onClick 处理程序。

        2.在您的片段中处理 onClick 覆盖方法。

             @Override
        public boolean onClick(View v) {
            //To Do
        }
        

        【讨论】:

          猜你喜欢
          • 2017-12-08
          • 2019-05-23
          • 2015-07-16
          • 2021-09-27
          • 1970-01-01
          • 2016-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多