我正在尝试使用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警告 信息:请参阅控制台中的完整输出
答案 0 :(得分:0)
ListFragment没有onAttach方法。错误说您正在尝试覆盖超类的方法,但没有方法可以覆盖。
https://developer.android.com/reference/android/app/ListFragment.html