【问题标题】:ListFragment onListItemClick not workingListFragment onListItemClick 不起作用
【发布时间】:2014-03-12 04:19:01
【问题描述】:

我正在使用带有可滑动示例的选项卡布局,选项卡上是列表视图,单击列表项时会打开新片段。我的问题是当我单击列表项时,什么也没有发生。 我正在使用以下示例并添加我的代码 androidhive.info/category/tab-view

添加列表

import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.ListFragment;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class AddingList extends ListFragment {
  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    String[] values = new String[] { "List", "iPhone", "WindowsMobile",
        "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
        "Linux", "OS/2" };
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
        android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);

  }

  @Override
  public void onListItemClick(ListView l, View v, int position, long id) {
      FragmentTransaction ft = getFragmentManager().beginTransaction();
         ft.replace(R.id.pager, new List()).commit();
  }
} 

【问题讨论】:

  • 是加载数据到listView吗??
  • 是的,带有数组字符串的 listfragment 可以。
  • 我的意思是加载数据以在设备中列出并显示?
  • @Merlevede - 对不起,我是 android 开发新手。但我做“onListItemClick”
  • @anuruddhika - 是的,它会加载列表并显示在设备上。

标签: android android-fragments android-viewpager android-listfragment fragmenttransaction


【解决方案1】:

将代码从 onActivityCreated() 方法移到 onCreateView() 方法中

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    String[] values = new String[] { "List", "iPhone", "WindowsMobile",
    "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
    "Linux", "OS/2" };

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
    android.R.layout.simple_list_item_1, values);

    setListAdapter(adapter);

    return super.onCreateView(inflater, container, savedInstanceState);
 }

更新:

  @Override
  public void onListItemClick(ListView l, View v, int position, long id) {


      FragmentManager manager = getFragmentManager();
      FragmentTransaction ft = manager.beginTransaction();
      ft.replace(R.id.pager, new Home());
      ft.commit();

  }

在您的 Fragment 中实现此方法。

 @Override
 public void setUserVisibleHint(boolean isVisibleToUser) {
  super.setUserVisibleHint(isVisibleToUser);

  // Make sure that we are currently visible
  if (this.isVisible()) {
    // Do your stuff here
    if (!isVisibleToUser) {
        Log.d("MyFragment", "Not visible");

    }
  }
  }

【讨论】:

  • 请看一下原来的问题,我已经添加了我的更新代码。我仍然遇到一些问题。当我点击列表项时,会出现一个空白片段。
  • 只需在 ListItemCLick 中打开 toast
  • 嗯?不知道你的意思。但是我试图在选择列表项时打开新片段。错误是我得到空白片段,当我点击不同的选项卡时,程序崩溃了
  • @Mihir 你的ListView id 是否等于android.R.id.list
  • no ListView1.But 这是我的 xml 文件的样子,而且我没有看到我在 piyush 代码中的任何地方调用 listview id schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >
【解决方案2】:

试试这个

 ListView list = (ListView) findViewById(R.id.pager1);

 list.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> arg0, View view, int arg2,
                        long arg3) {
                    // TODO Auto-generated method stub
                                     //Your action


                }
            });

【讨论】:

  • 你好 anuruddhika,感谢您帮助我。但我仍然遇到一些错误。你能告诉我最终的代码是什么样的吗?
  • 现在您可以在 onitemclick 方法中插入您的操作代码。
【解决方案3】:

试试这个。需要设置适配器

        ListView mListContainer = (ListView) findViewById(R.id.pager1);


        //YOURADAPTER NAME
        mInformedListAdapter = new InformedListAdapter(mContext, mStatistics,this);

        //mStatistics is the my  private Map<String, Map<String, String>> mStatistics = new HashMap<String, Map<String, String>>();

        mListContainer.setAdapter(mInformedListAdapter);
        mListContainer.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

         //DO YOURS



            }
        });

【讨论】:

【解决方案4】:

你们必须在覆盖的方法中调用 super.onItemClickListener 方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多