【问题标题】:setOnItemClickListener on ListView not workingListView 上的 setOnItemClickListener 不起作用
【发布时间】:2014-08-28 11:23:50
【问题描述】:

我在片段视图中管理 onItemClickListener 时遇到了一些困难。当我按下列表中的项目时,没有任何反应。请检查我的代码,如果我做对了,或者我的代码有什么问题,请告诉我。

public class People extends BaseFragment implements OnClickListener {
    static String name;
    ListView listview;
    TextView et;
    static public List<SuccessStoreyItem> success_list3 = new ArrayList<SuccessStoreyItem>();
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        View view= inflater.inflate(R.layout.home,null);
        ParserResult pr = new ParserResult();
        Button b=(Button) view.findViewById(R.id.home1);
        listview = (ListView)view.findViewById(R.id.lv_home);
        listview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                Toast.makeText(getActivity(), "ullu ka patha", Toast.LENGTH_LONG).show();
                /*Profile frg3 = new Profile();
                Bundle b3 = new Bundle();
                String username = success_list3.get(position).getStorey_id();
                b3.putString("username", username);
                frg3.setArguments(b3);
                ((MainActivity)getActivity()).launchNewFragment(frg3, R.id.tab2);
                Toast.makeText(getActivity(), "Name :"+name ,1).show();*/
            }
        });

        et=(TextView) view.findViewById(R.id.editText1);
        b.setOnClickListener(this);

        if(ParserResult.success_list2.size() != 0){
            success_list3 = ParserResult.success_list2;
        }
        listview.setAdapter(new Adapters(success_list3 ,MainActivity.mainactivity_context));
        ParserResult.success_list2 = new ArrayList<SuccessStoreyItem>();
        return view;
    }

    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        setTitle(R.string.Home);
    }
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        name=et.getText().toString();
        Bundle bundle = new Bundle();
        bundle.putString("Name", name);

    Toast.makeText(getActivity(), "Name :"+name ,1).show();


        //((MainActivity)getActivity()).launchNewFragment(new Home2(),R.id.tab1);
    }


}

更新:添加了列表视图结构

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

    <ImageView
        android:id="@+id/view_imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/view_tv_username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/view_imageview"
        android:layout_alignLeft="@+id/view_tv_age"
        android:layout_marginBottom="5sp"
        android:text="TextView" />

    <TextView
        android:id="@+id/view_tv_age"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/view_tv_username"
        android:layout_marginLeft="26dp"
        android:layout_toRightOf="@+id/view_imageview"
        android:text="TextView" />

    <ImageButton
        android:id="@+id/ib_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="29dp"
        android:layout_marginTop="18dp"
        android:background="#fff"
        android:src="@drawable/chevron" />

</RelativeLayout>

片段布局

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

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:padding="10sp" >


    <TextView
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="sp"
        android:gravity="center"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="New Machtes"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
        android:id="@+id/home1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="@drawable/iconnew"
        android:textColor="#ffffff"
        android:text="16" />
</RelativeLayout>

    <ListView
        android:id="@+id/lv_home"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/relativeLayout1" >
    </ListView>

</RelativeLayout>

【问题讨论】:

  • in make toast 尝试将 getActivity() 更改为 getApplicationContext()
  • 发布列表项布局和适配器
  • 尝试在 ListView 项目布局中将android:descendantFocusability="blocksDescendants" 添加到您的&lt;RelativeLayout..
  • @rogcg 非常感谢,它成功了。你能解释一下这里有什么问题吗? PS:你可以添加答案我会接受的
  • @rogcg 你知道它的相关第三方库吗。

标签: android android-fragments onitemclicklistener


【解决方案1】:

解决方案

在 ListView 项目布局中将android:descendantFocusability="blocksDescendants" 添加到您的&lt;RelativeLayout..

一种可能的解释

查看您的列表视图项目布局,我看到您有一个ImageButton。碰巧ImageButton 窃取它所在的视图组(列表行)的焦点。这意味着当您单击列表行时,捕获事件的始终是ImageButton .

通过添加android:descendantFocusability="blocksDescendants",我们阻止列表行的后代窃取焦点。

您可以阅读更多关于它的信息here

【讨论】:

    【解决方案2】:

    我认为您的 listview.setadapter() 行和与之关联的数据应该在您将 onclickitemlistener() 设置为该 listview 之前出现..

    【讨论】:

    • 刚刚做了,但没有任何反应
    猜你喜欢
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多