[英]ANDROID: Swapping strings on a single clickable TextView
闪存卡应用程序
您好,我正在制作一个flashcard应用程序,我想在用户点击主fcfront_textView时交换字符串。 主要问题是switch语句,因为它没有正确检测不同的情况和/或没有正确地交换字符串。 我尝试了我所知道的一切,下面是最好的情况,它从前到后交换,但它没有交换回来。
这个想法是我将先前存储的问题/答案字符串和onClick应该在Q / A之间交换。 最终我希望nextButton / prevButton在这对可点击的textView字符串(Q / A)之间导航,并且能够添加QAs但我不知道如何实现它。
感谢您的时间,请关注我的代码:
public class MainActivity extends splashActivity { Button closeButton, addButton, prevButton, nextButton; TextView QAText, answerText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_flashcard); QAText = (TextView) findViewById(R.id.fcfront_textView); answerText = (TextView) findViewById(R.id.fcfront_textView); //not used anywhere atm QAText.setOnClickListener(new View.OnClickListener() { //function to toggle between Q/A public void onClick(View v) { // exchange(); //switch(Resources.getSystem().getString(R.string.fc_back)) //bad! //switch(QAText.getText().toString()) //did not work: char != string switch(R.string.fc_front) { case R.string.fc_front: ((TextView)findViewById(R.id.fcfront_textView)).setText(R.string.fc_back); Toast.makeText(getApplicationContext(), R.string.fc_front , Toast.LENGTH_LONG).show(); //QAText.setVisibility(v.GONE); break; case R.string.fc_back: ((TextView)findViewById(R.id.fcfront_textView)).setText(R.string.fc_front); Toast.makeText(getApplicationContext(), "SWAPPING: back-to-front", Toast.LENGTH_LONG).show(); break; } Toast.makeText(getApplicationContext(), "OUT OF THE SWITCH", Toast.LENGTH_LONG).show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } //gets click event directly from xml public void next_Clicked(View view) { //test: Toast.makeText(getApplicationContext(), "Next button works!!", Toast.LENGTH_LONG).show(); } public void prev_Clicked(View view) { //test: Toast.makeText(getApplicationContext(), "Prev button works!!", Toast.LENGTH_LONG).show(); } //supposed to swap strings (did not work) private void exchange() { String frontstring = getString(R.string.fc_front); String backstring = getString(R.string.fc_back); String displaystring = getString(R.string.action_settings); //test: // Toast.makeText(getApplicationContext(), "textView works!", Toast.LENGTH_LONG).show(); if (frontstring != displaystring) { //displaystring = getString(R.string.fc_back); ((TextView) findViewById(R.id.fcfront_textView)).setText(R.string.fc_back); } else { //displaystring = getString(R.string.fc_front); ((TextView) findViewById(R.id.fcfront_textView)).setText(R.string.fc_front); } //switch case by id did not work: // switch(view.getId()) // { // case R.id.fcfront_textView: // TextView txtView = (TextView)findViewById(R.id.fcfront_textView); // txtView.setVisibility(View.GONE); // break; // } Toast.makeText(getApplicationContext(), "end of exchange()", Toast.LENGTH_LONG).show(); } } //end of main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MyActivity" android:clickable="true" android:id="@+id/background" android:background="#ff80b5ff"> <TextView android:text="@string/fc_front" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/fcfront_textView" android:layout_centerVertical="true" android:textSize="30sp" android:layout_centerHorizontal="true" android:linksClickable="true" android:textIsSelectable="false" android:singleLine="true" android:onClick="OnClick" android:clickable="true" /> <!--<TextView--> <!--android:text="@string/fc_back"--> <!--android:layout_width="wrap_content"--> <!--android:layout_height="wrap_content"--> <!--android:layout_below="@+id/fcfront_textView"--> <!--android:layout_centerHorizontal="true"--> <!--android:id="@+id/fcback_textView"--> <!--android:textSize="30sp"--> <!--android:linksClickable="true"--> <!--android:textIsSelectable="false"--> <!--android:singleLine="true"--> <!--android:clickable="true" />--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/main_prev" android:id="@+id/prevbutton" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:gravity="bottom|center" android:layout_weight="1" android:textSize="30sp" android:layout_alignParentStart="true" android:onClick="prev_Clicked" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/main_next" android:id="@+id/nextbutton" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:gravity="bottom|center" android:layout_weight="1" android:textSize="30sp" android:hint="Browse +" android:onClick="next_Clicked" android:layout_alignParentEnd="true" /> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="X" android:id="@+id/closebutton" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:gravity="center" android:textSize="30sp" android:layout_alignParentEnd="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="+" android:id="@+id/plusbutton" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:gravity="center" android:textSize="30sp" android:layout_alignParentStart="true" /> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">CSCE305HW1</string> <string name="fc_front">FLASHCARD: FRONT</string> <string name="fc_back">FLASHCARD: BACK</string> <string name="Q1">Question1</string> <string name="A1">Answer1</string> <string name="Q2">Question2</string> <string name="A2">Answer2 </string> <string name="action_settings">Nothing here yet</string> <string name="title_activity_main">MainActivity</string> <string name="title_activity_goodbye">goodbye</string> <string name="main_next">Next</string> <string name="main_prev">Previous</string> </resources>
我认为你的问题在于你的switch
语句。 什么是switch(R.string.fc_front)
? 就像这样 :
switch (2)
{
case 2 :
...
break;
case 1 :
...
break;
}
因为在R.java
文件中,每个资源都存储为一个数字。
你必须检查TextView
的文本而不是R.string.fc_front
。
尝试这个 :
if (textView.getText().equals("string1")) {
...
} else if (textView.getText().equals("string2")) {
...
} ...
尝试使用if-else代替切换进行字符串比较:
if(QAText.getText().toString().equals(getString(R.string.fc_front))){
QAText.setText(R.string.fc_back);
Toast.makeText(getApplicationContext(), R.string.fc_front , Toast.LENGTH_LONG).show();
}else{
QAText.setText(R.string.fc_front);
Toast.makeText(getApplicationContext(), "SWAPPING: back-to-front", Toast.LENGTH_LONG).show();
}
你应该比较字符串:
string front = getActivity().getResources().getString(R.string.fc_front);
string back = getActivity().getResources().getString(R.string.fc_back);
if (answerText.getText().toString().compareTo (front) == 0 ) {
//do something
} else if (answerText.getText().toString().compareTo (back) == 0 ) {
// do something else
}
不要使用equals比较字符串,而是使用compareTo。
您应该删除开关盒,并使用if / else代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.