【问题标题】:OnClickListener Does not Respond to Clicks in FragmentOnClickListener 不响应片段中的点击
【发布时间】:2012-08-17 21:17:10
【问题描述】:

我正在将旧程序转移到选项卡和片段实现。用户输入一个 Id 进行搜索,然后点击提交。但是我的“提交按钮”什么也没做。

我尝试了几种替代编码变体,但得到了相同的结果 - 死气沉沉!

这里是 XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/setUpAthletesTab"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
     android:background="#CCFFFF" >

    <TextView
        android:id="@+id/instructionText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="@string/instructionText"
    android:textColor="#FF0000"
    android:textAppearance="?android:attr/textAppearanceMedium"
     />

    <TableRow
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:stretchColumns="*" >

        <EditText
            android:id="@+id/editTextAthlete0"
            android:layout_width="145dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:hint="@string/hintText"
            android:inputType="number" />

        <TextView
            android:id="@+id/textAthleteName0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="5dp"
            android:hint="@string/athleteHintName0"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    </TableRow>

这是我的标签/片段

public class Tab3Fragment extends Fragment {

    /* (non-Javadoc)
     * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        /* Begin Insertion */
        LayoutInflater myInflater = inflater;
        ViewGroup myContainer = container;
        if(inflater == null) myInflater = inflater;
        if(container == null) myContainer = container;
        Log.d(APP_TAG,"At line 50 of Tab3Fragment myInflater = " + myInflater + " and myContainer = " + myContainer);
        getAthleteInfoFromExistingDatabase(myInflater,myContainer);

        LinearLayout tab3LinearLayout = (LinearLayout) inflater.inflate(R.layout.tab_frag3_layout, container, false);

        View mySubmitButton = tab3LinearLayout.findViewById(R.id.submitButton);
        ((Button) mySubmitButton).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Toast.makeText(Tab3Fragment.this.getActivity().getBaseContext(),
                        "clicked on Submit Button", Toast.LENGTH_LONG).show();

                Intent intent = new Intent();
                intent.setClass(getActivity(), RetrieveAthleteData.class);
                startActivity(intent);
            }
        });

        return (LinearLayout)inflater.inflate(R.layout.tab_frag3_layout, container, false);
    }

当我点击提交时,Toast 框和 Intent 都没有熄灭。

感谢您查看我的问题。

问题已解决!感谢 Dirk 建议将名称更改为全部小写。

【问题讨论】:

  • 我假设你可以看到由“Log.d(APP_TAG...”发出的日志消息?并且 setOnClickListener() 上没有 NullpointerException?测试一下:你能把 Toast 放在前面吗? findViewById() 所在的行。然后它会出现吗?
  • 是的,我可以看到 Log.d 语句。我在 mySubmitButton 声明前后插入了 Toast 语句。这两个都出现了。似乎我错过了我的 XML 文件声明中的一些基本内容。目前正在调查。
  • 在您的 xml 中没有 ID 为“submitButton”的按钮。你应该只使用小写,因此给它的 id "@+id/submit_button"。
  • OTOH 如果没有具有该 ID 的 Button,您应该得到 NullPointerException 或 ClassCastException。我猜你加载的布局比你想象的要好,因此点击了另一个没有注册 onClickListener 的按钮。
  • 好的,我采纳了 Dirk 的建议并重命名了我的按钮,使其没有大写字母“submit_button”。那成功了!现在,只要我按下按钮,我就可以看到 Toast 消息。 (该按钮是在我的 XML 中定义的,我只是错误地从我的帖子中省略了它 - 愚蠢的新手!)不知道为什么这很重要,但感谢您的帮助。

标签: android tabs onclick android-fragments onclicklistener


【解决方案1】:

在您的 xml 中没有 ID 为“submitButton”的按钮。

你应该只使用小写,因此给它的 id "@+id/submit_button"

虽然我找不到不允许骆驼案例 ID 的来源。甚至 Google 有时也会在他们的示例中使用驼峰式 ID。

【讨论】:

    【解决方案2】:

    您在这里夸大并返回了一系列全新的观点:

    return (LinearLayout)inflater.inflate(R.layout.tab_frag3_layout, container, false);
    

    您应该返回您所操作的膨胀视图:

    return tab3LinearLayout;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      相关资源
      最近更新 更多