【问题标题】:OnClickListener Issue on Fragment片段上的 OnClickListener 问题
【发布时间】:2018-04-13 07:39:24
【问题描述】:

我对 Fragment 上的事件 OnClickListener 有疑问。

  • 我使用的是 Android Studio 3.1
  • 这是我的源代码的捕获:


    焦点到黄色高亮,如果源代码我在什么时候给出注释声明 运行它已经可以了。但是当我取消注释时,它会使我的应用程序生效 关闭。

    然后我尝试通过在 XML 上提供事件 onClick 来更改方法,但不能 在课堂上使用method

【问题讨论】:

  • "这是我的源代码的捕获:" - 因为复制粘贴代码要困难得多?
  • 你已经实现了 View.OnClickListener。所以你必须实现 OnClick(View v) 方法。在那个 OnClick() 中编写你的代码。
  • OnClick(View v) 已经存在,因为当我实现 View.OnClickListener 时必须存在。但是方法还是空的
  • 欢迎来到 Stack Overflow!图片和屏幕截图可以很好地添加到帖子中,但请确保帖子在没有它们的情况下仍然清晰且有用。 不要发布代码或错误消息的图片。阅读why。而是直接将实际代码/消息复制并粘贴或键入到帖子中。

标签: android android-studio android-fragments onclick onclicklistener


【解决方案1】:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;

public class UncompleteFragment extends Fragment implements View.OnClickListener {

    private ArrayList<HashMap<String,String>> list;
    private SimpleAdapter sa;
    private HashMap<String,String> item;
    private ListView listView;
    private Button btnEdit;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.uncomplete, container, false);
        listView = rootView.findViewById(R.id.list);
        btnEdit = rootView.findViewById(R.id.btn_edit_uncomplete);
        btnEdit.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v)
            {
                Toast.makeText(getActivity(), "Button Edit Clicked!", Toast.LENGTH_SHORT).show();
            }
        });
        return rootView;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        list = new ArrayList<HashMap<String,String>>();
        for(int i=0;i<uncomplete.length;i++){
            item = new HashMap<String,String>();
            item.put( "line1", uncomplete[i][0]);
            item.put( "line2", uncomplete[i][1]);
            item.put( "line3", uncomplete[i][2]);
            item.put( "line4", uncomplete[i][3]);
            list.add( item );
        }

        sa = new SimpleAdapter(getActivity(), list,
                R.layout.uncomplete_list,
                new String[] { "line1","line2","line3","line4"},
                new int[] {R.id.date,R.id.check_in,R.id.check_out,R.id.work_hour});

        listView.setAdapter(sa);
    }

    private String[][] uncomplete =
            {{"12 Apr 2018","08:00","14:00","05:00"},
             {"27 Mar 2018","00:00","00:00","00:00"},
             {"06 Feb 2018","08:00","00:00","00:00"}};

    public void doEdit() {
        Toast.makeText(getActivity(), "Button Edit Clicked!", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onClick(View view) {

    }
}

【讨论】:

  • @Jyoti JK,我用你推荐的源代码,但是结果按钮还是空
【解决方案2】:

如果您在 XML 中声明 android:onclick="method",则需要传递 View 参数。

您还需要在 activity 中声明此方法(而不是在片段中)。

public void method(View view)
{
    Toast.makeText(getActivity(),"Button is clicked",Toast.LENGTH_SHORT).show();
}

在 Java 代码中,

button.setOnClickListener(new OnClickListener() {
    public void onClick(View v)
    {
        Toast.makeText(getActivity(),"Button is clicked",Toast.LENGTH_SHORT).show();
    }     
});

【讨论】:

  • 如果在调试模块上运行,结果调试:java.lang.reflect.InvocationTargetException java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view. View$OnClickListener)' 在空对象引用上
  • 它清楚地说,你的按钮是空的。您能否在您的问题中添加更改后的代码
  • 你可以像我的回答一样在java代码中设置onclicklistener。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多