如何设置Listview';在MainActivity中的子项Clicklistener不在适配器中(在android中)?

如何设置Listview';在MainActivity中的子项Clicklistener不在适配器中(在android中)?,android,listview,android-adapter,onitemclicklistener,Android,Listview,Android Adapter,Onitemclicklistener,嘿,伙计们,这是我关于stackoverflow的第一个问题。 我在一个主题上搜索了将近一个月,但没有找到任何相关的答案 我想将clicklistner设置为列出主活动中的子项 我知道Listview.setOnItemClickListner。。。还知道如何在自己的适配器中单击设置listview的子项。 但我不想要这个.. 我想设置listview在主活动中单击的子项 这是我单击列表项的主要活动代码 list.setOnItemClickListener(new AdapterVie

嘿,伙计们,这是我关于stackoverflow的第一个问题。 我在一个主题上搜索了将近一个月,但没有找到任何相关的答案

我想将clicklistner设置为列出主活动中的子项

我知道Listview.setOnItemClickListner。。。还知道如何在自己的适配器中单击设置listview的子项。

但我不想要这个..
我想设置listview在主活动中单击的子项

这是我单击列表项的主要活动代码

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int position, final long id) {


            final TextView tx;
            tx=(TextView)view.findViewById(R.id.textList);



            tx.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(listviewclick_Activity.this, "in=    "+String.valueOf(position), Toast.LENGTH_SHORT).show();      // clicking for textview on list   
                }
            });



            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    Toast.makeText(listviewclick_Activity.this,"out=   "+ String.valueOf(position), Toast.LENGTH_SHORT).show();  // clicking for whole listitem
                }
            });


        }
    });
list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图视图、最终整型位置、最终长id){
最终文本视图发送;
tx=(TextView)view.findViewById(R.id.textList);
tx.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(listviewclick_Activity.this,“in=“+String.valueOf(position),Toast.LENGTH_SHORT).show();//单击列表上的textview
}
});
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(listviewclick_Activity.this,“out=”+String.valueOf(position),Toast.LENGTH_SHORT.show();//单击整个listitem
}
});
}
});
此代码工作正常,但存在一个问题,即用户必须先单击 时间之后,所有点击将被设置

记住,我不想单击适配器中的子项。我只想在主活动中单击它。
希望得到一个好的答案……

我不明白你在做什么,但这部分:

 view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Toast.makeText(listviewclick_Activity.this, "out=   " + String.valueOf(position), Toast.LENGTH_SHORT).show();  // clicking for whole listitem
        }
    });
tx.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(listviewclick_Activity.this, "in=    "+String.valueOf(position), Toast.LENGTH_SHORT).show();      // clicking for textview on list   
                }
            });
这是错的!,因为
view
是已单击的列表视图项(行)

取而代之的是:

Toast.makeText(listviewclick_Activity.this, "out=   " +String.valueOf(position),Toast.LENGTH_SHORT).show();  // clicking for whole listitem
本部分还包括:

 view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Toast.makeText(listviewclick_Activity.this, "out=   " + String.valueOf(position), Toast.LENGTH_SHORT).show();  // clicking for whole listitem
        }
    });
tx.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(listviewclick_Activity.this, "in=    "+String.valueOf(position), Toast.LENGTH_SHORT).show();      // clicking for textview on list   
                }
            });

除非单击listview项,否则将无法工作,因此您应该将其移动到适配器内部。

您在单击侦听器中设置了一个单击侦听器,那么您期望得到什么?您需要在Adapter getView方法中设置click事件如果我在Adapter getView方法中设置clicklistener,则我将无法执行某些任务,例如,如果我想刷新列表并通过单击子项再次调用json,则我无法在Adapter getView方法中执行。@rajatkathuriya,实际上您可以!,只需创建一个接口[回调接口包含一些要实现的方法]并将其引用传递给适配器,然后在单击要单击的内容后调用该回调的方法,该方法应在MainActivity中实现。@rajatkathuriya还可以在您的main activity中创建一个公共或受保护的方法来刷新数据,然后您将传递
[您的主要活动]到适配器,onClick将此
强制转换为您的主活动,然后用于调用此方法!但是适配器getview方法有很多限制。有什么方法可以在主活动中完成吗???如果你想给listview项(行)中的某个组件分配一个侦听器,你必须得到这个视图,然后找到你的组件,最后分配侦听器,但这不是一个好方法,选中此复选框,我认为最好在适配器的
getView
中分配组件侦听器。我看到了链接提供的答案。这很好,但当我们点击子项时,视图必须是可见的。那么,在主要活动中是否还有其他方法可以做到这一点????你的回答对我来说很宝贵…@rajatkathuriya,如果你想点击任何一行,你可以在你的主要活动中这样做,就像你做的一样,但不要在listener内部调用listener(我提供的第一个更正),但是如果你想点击某一行中的某个组件,而不是该行本身,我从未见过有人在适配器外部这样做!