Java 创建wordsearch android应用程序。使用片段实现用户界面
我对编码非常陌生,尤其是Java,所以如果我错过了任何基本上显而易见的东西,我道歉。用外行的话回答会有帮助 我正在尝试创建一个wordsearch应用程序。一个非常简单的游戏版本,没什么特别的。我已经做了一个网格视图来放置字母的图像,在那里可以选择作品,这是最上面的片段。底部片段包含正在搜索的字母 这是包含gridview的顶部片段的代码。这在一个独立的应用程序中工作,每个字母都可以选择,并且可以进行多个选择。但是,当尝试将其放入片段Java 创建wordsearch android应用程序。使用片段实现用户界面,java,android,gridview,android-fragments,wordsearch,Java,Android,Gridview,Android Fragments,Wordsearch,我对编码非常陌生,尤其是Java,所以如果我错过了任何基本上显而易见的东西,我道歉。用外行的话回答会有帮助 我正在尝试创建一个wordsearch应用程序。一个非常简单的游戏版本,没什么特别的。我已经做了一个网格视图来放置字母的图像,在那里可以选择作品,这是最上面的片段。底部片段包含正在搜索的字母 这是包含gridview的顶部片段的代码。这在一个独立的应用程序中工作,每个字母都可以选择,并且可以进行多个选择。但是,当尝试将其放入片段i=newimageview(TopWordsearchFra
i=newimageview(TopWordsearchFragment.this)时
TopWordsearchFragment抛出错误“ImageView中的ImageView(android.content.Context)无法应用于(com.example.sebastian.multipleSelectGrid.TopWordsearchFragment”
这是我的第一个问题
package com.example.sebastian.multipleselectiongrid;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Checkable;
import android.widget.FrameLayout;
import android.widget.GridView;
import android.widget.ImageView;
public class TopWordsearchFragment extends Fragment {
GridView mGrid;
TopSectionListener activityCommander;
public interface TopSectionListener{
public void searchWordsearchWords();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try{
activityCommander = (TopSectionListener)activity;
}catch(ClassCastException e){
throw new ClassCastException(activity.toString());
}
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.grid_1, container, false);
mGrid = (GridView) view.findViewById(R.id.myGrid);
mGrid.setAdapter(new ImageAdapter());
mGrid.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
mGrid.setMultiChoiceModeListener(new MultiChoiceModeListener());
return view;
}
public class ImageAdapter extends BaseAdapter {
public View getView(int position, View convertView, ViewGroup parent) {
CheckableLayout l;
ImageView i;
if (convertView == null) {
i = new ImageView(TopWordsearchFragment.this);
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setLayoutParams(new GridView.LayoutParams(85, 85));
l = new CheckableLayout(TopWordsearchFragment.this);
l.setLayoutParams(new GridView.LayoutParams(
GridView.LayoutParams.WRAP_CONTENT,
GridView.LayoutParams.WRAP_CONTENT));
l.addView(i);
} else {
l = (CheckableLayout) convertView;
i = (ImageView) l.getChildAt(0);
}
i.setImageResource(mThumbIds[position]);
return l;
}
public final int getCount() {
return mThumbIds.length;
}
public final Object getItem(int position) {
return null;
}
public final long getItemId(int position) {
return 0;
}
private Integer[] mThumbIds = {
R.drawable.letter_j, R.drawable.letter_s, R.drawable.letter_o, R.drawable.letter_l, R.drawable.letter_u, R.drawable.letter_t, R.drawable.letter_i, R.drawable.letter_s,
R.drawable.letter_s, R.drawable.letter_u, R.drawable.letter_n, R.drawable.letter_a, R.drawable.letter_r, R.drawable.letter_u, R.drawable.letter_u, R.drawable.letter_a,
R.drawable.letter_n, R.drawable.letter_e, R.drawable.letter_p, R.drawable.letter_t, R.drawable.letter_u, R.drawable.letter_n, R.drawable.letter_e, R.drawable.letter_t,
R.drawable.letter_s, R.drawable.letter_o, R.drawable.letter_n, R.drawable.letter_i, R.drawable.letter_e, R.drawable.letter_i, R.drawable.letter_s, R.drawable.letter_u,
R.drawable.letter_r, R.drawable.letter_c, R.drawable.letter_e, R.drawable.letter_v, R.drawable.letter_t, R.drawable.letter_r, R.drawable.letter_e, R.drawable.letter_r,
R.drawable.letter_a, R.drawable.letter_h, R.drawable.letter_t, R.drawable.letter_r, R.drawable.letter_a, R.drawable.letter_e, R.drawable.letter_s, R.drawable.letter_n,
R.drawable.letter_m, R.drawable.letter_m, R.drawable.letter_e, R.drawable.letter_r, R.drawable.letter_c, R.drawable.letter_u, R.drawable.letter_r, R.drawable.letter_y
};
}
public class CheckableLayout extends FrameLayout implements Checkable {
private boolean mChecked;
public CheckableLayout(Context context) {
super(context);
}
@SuppressWarnings("deprecation")
public void setChecked(boolean checked) {
mChecked = checked;
setBackgroundDrawable(checked ? getResources().getDrawable(
R.drawable.blue) : null);
}
public boolean isChecked() {
return mChecked;
}
public void toggle() {
setChecked(!mChecked);
}
}
public class MultiChoiceModeListener implements
GridView.MultiChoiceModeListener {
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return true;
}
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return true;
}
public void onDestroyActionMode(ActionMode mode) {
}
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
}
}
}
我的第二个问题是片段不会出现。BottomSectionFragment不会显示任何编码错误,并且在我运行它后会抛出一个错误(下面将显示)。这是在注释掉上面的TopSectionFragment并从activity_main.xml文件中删除该片段之后
这是MainActivity.Java文件
package com.example.sebastian.multipleselectiongrid;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
package com.example.sebastian.multipleselectiongrid;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.app.Activity;
public class BottomSectionFragment extends Fragment {
TextView word1;
TextView word2;
TextView word3;
TextView word4;
TextView word5;
TextView word6;
TextView word7;
TextView word8;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.bottom_section_fragment, container, false);
word1 = (TextView) view.findViewById(R.id.word1);
word2 = (TextView) view.findViewById(R.id.word2);
word3 = (TextView) view.findViewById(R.id.word3);
word4 = (TextView) view.findViewById(R.id.word4);
word5 = (TextView) view.findViewById(R.id.word5);
word6 = (TextView) view.findViewById(R.id.word6);
word7 = (TextView) view.findViewById(R.id.word7);
word8 = (TextView) view.findViewById(R.id.word8);
return view;
}
}
下面是BottomSectionFragment.Java文件
package com.example.sebastian.multipleselectiongrid;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
package com.example.sebastian.multipleselectiongrid;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.app.Activity;
public class BottomSectionFragment extends Fragment {
TextView word1;
TextView word2;
TextView word3;
TextView word4;
TextView word5;
TextView word6;
TextView word7;
TextView word8;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.bottom_section_fragment, container, false);
word1 = (TextView) view.findViewById(R.id.word1);
word2 = (TextView) view.findViewById(R.id.word2);
word3 = (TextView) view.findViewById(R.id.word3);
word4 = (TextView) view.findViewById(R.id.word4);
word5 = (TextView) view.findViewById(R.id.word5);
word6 = (TextView) view.findViewById(R.id.word6);
word7 = (TextView) view.findViewById(R.id.word7);
word8 = (TextView) view.findViewById(R.id.word8);
return view;
}
}
当我同时运行这段代码时,我收到错误FATAL EXCEPTION:main
java.lang.RuntimeException:无法启动activity ComponentInfo{com.example.sebastian.multipleSelectGrid/com.example.sebastian.multipleSelectGrid.MainActivity}:android.view.InflateException:二进制XML文件行#8:膨胀类片段时出错
并引发三个原因:原因:android.view.InflateException:二进制XML文件行#8:错误膨胀类片段
Caused by: android.app.Fragment$InstantiationException: Trying to instantiate a class com.example.sebastian.multipleselectiongrid.BottomSectionFragment that is not a Fragment
Caused by: java.lang.ClassCastException
并在每三种情况下指向行setContentView(R.layout.activity_main);
正如我所说,我对编码还不熟悉,答案可能非常明显,或者我用错误的方式解决了这个问题。因此,任何有用的信息或建议都将不胜感激
编辑:谢谢你的回答。我成功地解决了问题2。在我的MainActivity类中,如果我扩展了ActionBarActivity而不仅仅是Activity,它就可以正常工作。我检查了xml文件,它们的编码正是@Kumiho建议的
至于问题1,我无法解决在片段中使用此特定代码的问题,因此我将其保留在MainActivity中(进行了适当的编辑)。正如我所希望的那样,这两个代码正在一起工作。现在来实现功能
再次感谢。第一个问题: 在构造函数
i=newImageView(TopWordsearchFragment.this.getActivity())中使用片段的父活动;
第二个问题:
二进制XML文件行#8:错误膨胀类片段
指向XML文件中的语法问题。您可能应该将该文件的内容添加到问题中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewgroup_activity_layout);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container_for_your_fragment, new MyFragment())
.commit();
}
...
<fragment android:name="com.example.my.FragmentClass"
android:id="@+id/fragment_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
... (further parameters if needed)
/>
...
。。。
...
更多信息,你会发现
祝你好运。我认为你应该阅读以了解什么是片段和活动以及它们是如何工作的。