2017-10-13 68 views
-1

我想使一个文本视图显示我选择的项目,但我试图实现的代码没有工作。我也想弄清楚如何显示最终选项 - 有一个主要列表,并且在从主列表中选择一个项目后,它将带您到另一个列表,您可以在其中进行最终选择(Main2activity和main3activity是具有最终列表选择的活动的名称)。这里是我的代码:显示从列表视图到文本视图选择的项目

public class MainActivity extends AppCompatActivity { 

    String items[] = new String[]{ 
"Apple", "Orange", "Pear" 
}; 

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

     Intent myintent = getIntent(); 
     String value = myintent.getStringExtra("myintent"); 
     TextView textview = (TextView)findViewById(R.id.textView2); 
     textview.setText(value); 



     ListView listView = (ListView) findViewById(languageselector); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items); 
     listView.setAdapter(adapter); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 


      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       if (position==0){ 
       Intent myintent = new Intent(view.getContext(), Main2Activity.class); 
       startActivityForResult(myintent, 0); 
      } 
       if (position==1){ 
        Intent myintent = new Intent(view.getContext(), Main3Activity.class); 
        startActivityForResult(myintent, 1); 
       } 



      } 
      }); 
}} 
+0

你得到任何错误? –

+0

为什么你用“startActivityForResult”?是你通过适配器的位置与“startActivityForResult(myintent,1);”这个代码? –

+0

您只显示您的MainActivity,我认为这是您启动应用程序时启动的Activity。那么你期望从这段代码中'value'找到什么?String value = myintent.getStringExtra(“myintent”);'? – Barns

回答

0

请注意,您不能直接使用此示例代码。您需要根据您在其他活动Main2ActivityMain3Activity中所做的更改进行更改。

首先从MainActivity中删除这两行代码,因为我没有看到您发送MainActivity任何东西。

Intent myintent = getIntent(); 
String value = myintent.getStringExtra("myintent"); 

在任一Main2ActivityMain3ActivityonItemClick方法检索您选择的值:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     // I use yourList because I do not know how you call 
     // your list in either Main2Activity or Main3Activity 
     // In MainActivity you called it items 
     selectionResult = yourList[position]; 

     //Now return that value back to the activity which called this activity 
     Intent intent = new Intent(); 
     intent.putExtra("myintent", selectionResult); 
     setResult(RESULT_OK, intent); 
     finish(); 
    }); 
} 

在你MainActivity你需要从其他的活动之一获得的结果。所以你需要使用重写的方法onActivityResult

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    try{ 
     if (requestCode == REQUEST_CODE_MAIN) { 
      if(resultCode == RESULT_OK){ 
       // Here is where you get your results from Main2Activity or Main3Activity 
       String s = data.getStringExtra("myintent"); 
       if(!s.isEmpty){ 
        textview.setText(value); 
       } 
       else{ 
        Toast.makeText(MainActivity.this, "Don't know what happened", Toast.LENGTH_SHORT).show(); 
       } 
      } 
      if(resultCode == RESULT_CANCELED){ 
        Toast.makeText(MainActivity.this, "I was canceled", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
    catch (Exception ex){ 
     Log.e(TAG, ex.getMessage()); 
    } 
} 

你应该在你MainActivity设置请求代码:

private static final String REQUEST_CODE_MAIN = 1524; 

1524是随机的,但它应该是唯一的。

您还需要在MainActivity类中定义,以便它对onActivityResult可见。

private TextView textview; 

然后里面onCreate设置这样的:

textview = (TextView)findViewById(R.id.textView2); 

从您的MainActivity在onItemClick用它来调用其他活动:

Intent myintent = new Intent(view.getContext(), Main2Activity.class); 
startActivityForResult(myintent, REQUEST_CODE_MAIN); 
相关问题