Head First Android示例

时间:2017-03-29 01:58:55

标签: java android updates

我正在尝试使用Head First Android开发手册,我遇到了一些障碍。我假设主要原因是文本已过时,但我的示例在运行时仍然失败,我似乎无法找到原因。以下是相关文件:

activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.hfad.workout.MainActivity">

<fragment
    class="com.hfad.workout.WorkoutListFragment"
    android:id="@+id/list_frag"
    android:layout_width="0dp"
    android:layout_weight="2"
    android:layout_height="match_parent"></fragment>

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="0dp"
    android:layout_weight="3"
    android:layout_height="match_parent"></FrameLayout>

</LinearLayout>

MainActivity.java:

package com.hfad.workout;

import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity implements
WorkoutListFragment.WorkoutListListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public void itemClicked(long id) {
    WorkoutDetailFragment details = new WorkoutDetailFragment();
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    details.setWorkout(id);
    ft.replace(R.id.fragment_container, details);
    ft.addToBackStack(null);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.commit();
}

}

如果碰巧相关,我可以添加其他文件。我已经遇到了&#34; getFragmentManager&#34;代码,但快速搜索告诉我需要使用的更新代码是&#34; getSupportFragmentManager&#34;所以我改变了。它也说从不使用itemClicked的覆盖,但因为包含了一个片段列表(id是&#34; list_frag&#34;)这个方法应该内置,对吗?我一直在完全关注这本书,但是过时的代码实例让我不再学习。

编辑:

package layout;


import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.hfad.workout.Workout;

public class WorkoutListFragment extends ListFragment {


public WorkoutListFragment() {
    // Required empty public constructor
}

static interface WorkoutListListener {
    void itemClicked(long id);
};

private WorkoutListListener listener;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    String[] names = new String[Workout.workouts.length];
    for (int i = 0; i < names.length; i++) {
        names[i] = Workout.workouts[i].getName();
    }

    ArrayAdapter<String> adapter = new ArrayAdapter<String>  (inflater.getContext(), android.R.layout.simple_list_item_1, names);
    setListAdapter(adapter);
    return super.onCreateView(inflater, container, savedInstanceState);
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.listener = (WorkoutListListener)activity;
}

@Override
public void onListItemClick (ListView l, View v, int position, long id) {
    if (listener != null) {
        listener.itemClicked(id);
    }
}

}

错误:

Gradle tasks [:app:assembleDebug]

C:\用户\ reega \ AndroidStudioProjects \锻炼\应用\ SRC \主\的java \ COM \ hfad \锻炼\ MainActivity.java

错误:(15,5)错误:方法不会覆盖或实现超类型

中的方法

错误:任务&#39;:app:compileDebugJavaWithJavac&#39;执行失败。

  

编译失败;有关详细信息,请参阅编译器错误输出。

信息:建筑失败 信息:总时间:8.256秒 信息:2个错误 信息:0警告 信息:请参阅控制台中的完整输出

1 个答案:

答案 0 :(得分:0)

ListFragment没有onAttach方法。错误说您正在尝试覆盖超类的方法,但没有方法可以覆盖。

https://developer.android.com/reference/android/app/ListFragment.html