【问题标题】:Simple Functionality of Previous and Next Intents in the same Android Activity?同一个Android Activity中上一个和下一个意图的简单功能?
【发布时间】:2013-05-25 06:56:32
【问题描述】:

我是 Android 编程新手。 谁能帮我解决同一个 Android Activity 中的上一个和下一个 Intent 的功能?

我正在构建一个报价应用程序。 所以,我现在把所有的报价都整齐地存储在一个字符串数组中。

我需要做的就是以前后方式循环遍历字符串数组。

我尝试使用 For/While 循环,但是,我不断收到错误,我必须将迭代器变量“i”设置为 Final。

因此,我使用了 Iterator 类型 并且我能够整齐地向前移动。 然而,搬回来是个问题。我不知道如何通过Iterator类型来实现。

此外,应用程序在字符串数组的末尾崩溃(尽管我有一个 catch 异常块)。

谁能帮我解决这个问题?

提前致谢!

public class MainActivity extends Activity implements OnClickListener{

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

final String[] myStringArray = getResources().getStringArray(R.array.DayOfWeek);
final List<String> myArray = new ArrayList<String>(Arrays.asList(myStringArray));
final Iterator<String> it = myArray.iterator();

View prevButton = (Button) findViewById(R.id.previous_button);
View nextButton = (Button) findViewById(R.id.next_button);

final TextView tv = (TextView)findViewById(R.id.text);

prevButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Log.d("TAG", "prevButton tapped");
       //How Can I move back the String Array?
    }
});

    nextButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Log.d("TAG", "nextButton tapped");

        //Using Iterator
        if(it.hasNext()) {
            //refreshTextView();
            tv.setText(it.next());
            Log.d("WhichString", it.next());

           //Once I reach the end, the app crashes :(
        }
    }
});
} catch(Exception e) {
    //Exception block useless as of now
    Log.e("MyApp", "exception", e);
}    
}

@Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub
    //Had to keep this block as it was looking for it in the code.
    //Although this is not required.

     Log.d("Test","hi");
}

我尝试了@Nasser 的解决方案。 但是当我运行代码时,我得到了这个错误。

... 05-25 08:23:59.492: W/dalvikvm(1060): threadid=1: 线程退出未捕获异常 (group=0x40a71930) 05-25 08:23:59.512: E/AndroidRuntime(1060): 致命异常: main 05-25 08:23:59.512: E/AndroidRuntime(1060): java.lang.RuntimeException: 无法实例化活动 ComponentInfo{com.adworks.quotes/com.adworks.quotes.MainActivity}: java.lang.NullPointerException 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 android.app.ActivityThread.access$600(ActivityThread.java:141) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 android.os.Handler.dispatchMessage(Handler.java:99) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 android.os.Looper.loop(Looper.java:137) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 android.app.ActivityThread.main(ActivityThread.java:5041) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 java.lang.reflect.Method.invokeNative(Native Method) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 java.lang.reflect.Method.invoke(Method.java:511) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 05-25 08:23:59.512: E/AndroidRuntime(1060): at dalvik.system.NativeStart.main(Native Method) 05-25 08:23:59.512: E/AndroidRuntime(1060): 引起: java.lang.NullPointerException 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 android.content.ContextWrapper.getResources(ContextWrapper.java:89) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78) 05-25 08:23:59.512: E/AndroidRuntime(1060): at com.adworks.quotes.MainActivity.(MainActivity.java:15) 05-25 08:23:59.512: E/AndroidRuntime(1060): at java.lang.Class.newInstanceImpl(Native Method) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 java.lang.Class.newInstance(Class.java:1319) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 android.app.Instrumentation.newActivity(Instrumentation.java:1054) 05-25 08:23:59.512: E/AndroidRuntime(1060): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097) 05-25 08:23:59.512: E/AndroidRuntime(1060): ... 11 更多

我以这种方式调用我的字符串数组。

                nextButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                    textOut = myStringArray[getCount()];

                    tv.setText(textOut);


            }

【问题讨论】:

  • 不要使用迭代器,只需使用int 值来表示当前位置,并在两个OnClickListeners 中简单地增加/减少该值并使用该位置从列表中获取报价指标。您还需要插入一些检查,以免超出数组/列表的边界。
  • 我尝试重新格式化,但您缺少一些代码。 (在哪里尝试(try catch)
  • @RvdK - 刚刚添加了完整的代码。

标签: android android-layout android-listview


【解决方案1】:

我认为您应该像@Luksprog 所说的那样使用 int 变量来存储您的当前位置。

有点像

private int quotesCount = 0;

当点击 NextButton 时

myArray.get(getCount());

使用某种方法计算当前计数;

public int getCount() {
        if (myArray.size() > 0){
            if (quotesCount == myArray.size() - 1) {
                quotesCount = 0;
            } else {
                quotesCount++;
            }
        }
        return quotesCount;
    }

它没有完全工作,只是一些想法如何做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2019-01-30
    • 2018-12-29
    • 2011-10-20
    • 2014-12-20
    相关资源
    最近更新 更多