强制关闭阵列
这是我的应用程序的一部分代码,我试图让人们可以查看他们最喜欢的部分。我为它工作。现在我试图让它在onLongClick时允许删除一个选项。我不知道该部分是否工作,因为我目前正在遇到阵列部分中的一个错误,我已经缩小了它的范围。它非常奇怪,因为从我能看到的区别在于它的工作,而不是真的不应该有任何问题。如果你愿意,也许我需要一些新鲜的眼睛看着这个。由于强制关闭阵列
public class Favorites extends ListActivity{
public static final String PREFS_NAME = "Favorites";
String[] title;
int favNum, num;
int[] category, member;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
grabFav();
num = favNum;
num++;
if(favNum > -1){
title = new String[num];
category = new int[num];
member = new int[num];
allFavs();
setListAdapter(new ArrayAdapter<String>(this, R.layout.item_list, title));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
}
}
public void grabFav(){
SharedPreferences saved = this.getSharedPreferences(PREFS_NAME, 0);
favNum = saved.getInt("FavoriteNum", -1);
}
public void allFavs(){
SharedPreferences saved = this.getSharedPreferences(PREFS_NAME, 0);
for(int i = 0; i< favNum; i++){
title[i] = saved.getString("Title"+i, "");
}
for(int n = 0; n< favNum; n++){
category[n] = saved.getInt("Category"+n, 0);
}
for(int m = 0; m< favNum; m++){
member[m] = saved.getInt("Member"+m, 0);
}
}
}
当该上部看起来像这样
grabFav();
favNum++;
if(favNum > 0){
title = new String[favNum];
category = new int[favNum];
member = new int[favNum];
allFavs();
它正常工作(不知道的onLongItemClick,因为我通常把它注释掉这样我就可以找到错误)。从我可以告诉它应该工作得很好。我发布了整个班级,你会发现另一个可能会导致问题的错误。这里是日志猫,如果你想看
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): FATAL EXCEPTION: main
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): java.lang.NullPointerException
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.AbsListView.obtainView(AbsListView.java:1315)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.ListView.makeAndAddView(ListView.java:1727)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.ListView.fillDown(ListView.java:652)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.ListView.fillFromTop(ListView.java:709)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.ListView.layoutChildren(ListView.java:1580)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.AbsListView.onLayout(AbsListView.java:1147)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.view.View.layout(View.java:7035)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.view.View.layout(View.java:7035)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.view.View.layout(View.java:7035)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.view.View.layout(View.java:7035)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.os.Looper.loop(Looper.java:123)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at java.lang.reflect.Method.invokeNative(Native Method)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at java.lang.reflect.Method.invoke(Method.java:521)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): at dalvik.system.NativeStart.main(Native Method)
任何帮助,非常感谢。谢谢
你检查,所有的标题字符串你得到实际存在你的喜好,即该行不分配给null
title[i]
:
title[i] = saved.getString("Title"+i, "");
也许你错过了零冠军“Title0”,并开始只在“标题1”?
那是我之前修复的问题。列表视图收藏会在下一个收藏被收藏后填充。当favNum首先被调用时,它是-1,直到它在每个最爱之后递增。所以它在for循环中从0开始。这可能与该领域有关,所以我会尝试一些东西。谢谢。 – steven
你在做什么。我基本上只是在几个地方改变了num和favNum的角色,并解决了这个问题。顺便说一下,当我接受删除之后,你碰巧知道更新列表视图的方法吗? – steven
如果您将'ArrayAdapter'存储在'Activity'的实例字段中,则可以使用[ArrayAdapter.remove()](http://developer.android.com/reference/android/widget/ArrayAdapter.html#删除(T))onContextItemSelected()'。 –
在使用视图之前,您可以使用此格式立即设置活动内容。我曾经获得空指针异常,每当我叫 之前的观点方法的setContentView方法..希望这会解决您的问题:)
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_activity_xml);
// your code
}
'
我试过了,这是个好主意,但问题仍然存在于数组中。原因我没有setContent视图是因为Google的ListView代码没有。谢谢 – steven
您需要减少代码量,这将有助于您找到问题,并鼓励在SO上提供更多答案。 –
@ Philipp好吧,我减少了一些。我留下了它调用的东西,虽然 – steven