【问题标题】:Android show backwards array list elementsAndroid 向后显示数组列表元素
【发布时间】:2017-10-12 20:20:15
【问题描述】:

我有一个可点击的 TextView,当您按下它时,它会从数组列表中检索元素并在同一个 TextView 上随机显示它们。每次按下 TextView 时,它都会显示另一个元素。

现在,我想按显示的顺序保存这些元素,然后按上一个按钮,每次显示被显示的元素的前一个元素,直到第一个元素..

我自己尝试了一下,但它只保留一个元素,而不是所有已显示的元素,并且不会向后显示它们。

ArrayList<String> random = new ArrayList<String>();

Text_View.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    if (myString==null||myString.size()==0){
                        myString = new ArrayList<String>();
                        Collections.addAll(myString,res.getStringArray(R.array.Text_array));
                        Collections.shuffle(myString);
                    }
                    String q = myString.remove(0);
                    Text_View.setText(q);


                    for (int i=0;i<myString.size();i++) {
                        random.add(q);
                    }
                }

            });

            prev.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    for (int counter = myString.size() - 1; counter >= 0; counter--) {
                        Text_View.setText(random.get(counter));
                    }
                }
            });

谢谢你..

更新 我正在发布带有您指出的更正的代码,但仍然无法正常工作,但更糟糕的是,它崩溃了! 公共类 MyActivity 扩展 Activity {
public int counter;

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

       Text_View.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {

                   int counter = myString.size() - 1;

                    if (myString==null||myString.size()==0){
                        myString = new ArrayList<String>();
                        Collections.addAll(myString,res.getStringArray(R.array.Text_array));
                        Collections.shuffle(myString);
                    }
                    String q = myString.remove(0);
                    Text_View.setText(q);

                    for (int i=0;i<myString.size();i++) {
                        random.add(q);
                    }
                }
            });

            prev.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    Text_View.setText(random.get(counter));
                    counter--;

                }
            });

更新 2 我做出新的改变。即使我多次按下该按钮也不会崩溃,但是,我每次只得到第一个显示的元素。新代码是:
public class MyActivity extends Activity {

public int counter;

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

       Text_View.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {

                    Resources res = getResources();

                    if (myString==null||myString.size()==0){
                        myString = new ArrayList<String>();
                        Collections.addAll(myString,res.getStringArray(R.array.Text_array));
                        Collections.shuffle(myString);
                    }
                    String q = myString.remove(0);
                    Text_View.setText(q);

                    for (int i=0;i<myString.size();i++) {
                        random.add(q);
                    }
                }
            });

            prev.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                   int counter = myString.size() - 2;

                    if (counter>=0){

                    Text_View.setText(random.get(counter));
                    counter--;

                }

对不起,我不知道如何使用控制台..

【问题讨论】:

    标签: android arraylist


    【解决方案1】:

    将第二次更新改成这个

    public class MyActivity extends Activity {
    
    public int counter;
    private static final String TAG = "whatever"; 
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.family_excuses);
    
           Text_View.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
    
                        Resources res = getResources();
    
                        if (myString==null||myString.size()==0){
                            myString = new ArrayList<String>();
                            Collections.addAll(myString,res.getStringArray(R.array.Text_array));
                            Collections.shuffle(myString);
                            counter = myString.size() - 2;
    
                        }
                        String q = myString.remove(0);
                        Text_View.setText(q);
    
                        for (int i=0;i<myString.size();i++) {
                            random.add(q);
                        }
                    }
                });
    
                prev.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
    
    
                        if (counter>=0){
                        Log.i(TAG,Integer.toString(counter));
                        Text_View.setText(random.get(counter));
                        counter--;
    
                    }
    

    将你的手机连接到你的电脑,打开安卓显示器,运行应用程序并搜索(它有一个搜索栏)你的标签(这里,它叫什么)。它将过滤结果,因此将它们发布在这里。另外,告诉我 Text_array 中有多少项目,您单击 text_View 的次数以及 prev 的次数。例如,当您先按 textview 3(或更多)次时会发生什么?

    我要睡觉了,早上见

    编辑 1:这应该可以,我创建了一个项目来测试它,它对我有用

    public class MyActivity extends Activity {
    
        public int counter;
        private static final String TAG = "whatever";
        ArrayList <String> myString=null;
        private TextView Text_View;
        private Button prev;
        public ArrayList<String> random=new ArrayList<String>();
    
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.family_excuses);
            Text_View = (TextView) findViewById(R.id.Text_View);
            prev = (Button) findViewById(R.id.button);//request location
    
            Text_View.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    Resources res = getResources();
    
                    if (myString==null||myString.size()==0){
                        myString = new ArrayList<String>();
                        Collections.addAll(myString,res.getStringArray(R.array.Text_array));
                        Collections.shuffle(myString);
    
                    }
                    String q = myString.remove(0);
                    Text_View.setText(q);
    
                        random.add(q);
                    counter=random.size()-2;
    
                }
            });
    
            prev.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
    
                    if (counter >= 0) {
    
                        Text_View.setText(random.get(counter));
                        counter--;
    
                    }
                }
            });
        }
    }
    

    唯一的问题应该是如果您按 textview>prev>textview 则它不起作用,但我们也会解决这个问题,我只是想确保它也适合您

    EDIT 2:这应该是最终版本,适用于 textview>prev>textview。 我不确定该行是否应该是 mark=counter+2;,请随意更改数字,因为我仍然对您要做什么感到困惑

    public class MyActivity extends Activity {
    
        public int counter;
        private static final String TAG = "whatever";
        ArrayList <String> myString=null;
        private TextView Text_View;
        private Button prev;
        private int mark=-1;
        public ArrayList<String> random=new ArrayList<String>();
    
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.family_excuses);
            Text_View = (TextView) findViewById(R.id.Text_View);
            prev = (Button) findViewById(R.id.button);//request location
    
            Text_View.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    Resources res = getResources();
    
                    if (myString==null||myString.size()==0){
                        myString = new ArrayList<String>();
                        Collections.addAll(myString,res.getStringArray(R.array.Text_array));
                        Collections.shuffle(myString);
    
                    }
                    String q = myString.remove(0);
                    Text_View.setText(q);
                    Log.i(TAG,Integer.toString(mark));
                    if (mark==-1){
    
                        random.add(q);
    
                    }else {
                        random.add(mark,q);
                    }
                    counter=random.size()-2;
    
                }
            });
    
            prev.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
    
                    if (counter >= 0) {
    
                        Text_View.setText(random.get(counter));
                        counter--;
                        mark=counter+2;
    
                    }
                }
            });
        }
    }
    

    【讨论】:

    • 谢谢.. 好吧,我在手机上运行应用程序时按了运行.. 当我按下 Text_view 时它没有显示任何内容,只有上一个按钮.. 我按了 5 次Text_view, 2 previous, 3 Text_view, 4 previous, 6 Text_views and 1 previous.. 结果是:I/whatever: 20 I/whatever: 19 I/whatever: 18 I/whatever: 17 I/whatever: 16 I/whatever : 15 I/whatever: 14 如果还有什么我需要做才能看到结果,请告诉我.. 谢谢,晚安!!
    • 不客气。我正在查看您给出示例的评论,我试图理解它。假设您的值是 1-5,随机为 2、4、3、5、1。按 textview 4 次后,您应该有 2、4、3、5。如果你再按一次textview,你会得到2、4、3、5、1。但如果您改为按 prev 2 次然后按 textview,您将获得 2、4、1、3、5。我说的对吗?
    • 是的,没错,这就是我想要的!再次感谢!!
    • 添加了新版本,看看是不是你想要的
    • 我测试了一下,第一个版本比第二个更正确..非常感谢您的尝试!!!
    【解决方案2】:

    我认为你应该改变 Text_View.setText(q); 到 Text_View.append(q); 编辑:将其更改为:

    prev.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                        Text_View.setText(random.get(counter));
                    counter--;
                }
            });
    

    在 Text_View.setOnClickListener 中给计数器一个值

    counter = myString.size() - 1;
    

    并用你的全局变量初始化它,例如

    public class yourActivity extends AppCompatActivity {
    
    public int counter;
    

    EDIT 2 为您的原始答案添加延迟

        prev.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
    private Handler mHandler = new Handler();
    
                        for (int counter = myString.size() - 1; counter >= 0; counter--) {
                            mHandler.postDelayed(new Runnable() {
                public void run() {
                    doStuff(random.get(i));
                }
            }, 5000);
    
                        }
                    }
                });
    
        private void doStuff(String i) {
        Text_View.setText(i);
        }
    

    并将处理程序添加到您导入的库中

    【讨论】:

    • 第一部分(点击后随机显示元素),完美运行..问题在于保存在arraylist中并显示向后..谢谢
    • 你试过去掉for循环吗?也许它显示的一切太快了,你看不到,如果我理解正确,你只想在点击时更改文本
    • 我只是删除了第一个 for 循环,它就崩溃了.. :(
    • 我的意思是 (int counter = myString.size() - 1; counter >= 0; counter--) { Text_View.setText(random.get(counter)); }
    • 我做了“Text_View.setText(random.get(myString.size()-1));”但它只显示第一个元素,而不是最后一个元素的前一个..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多