显示从列表视图到文本视图选择的项目
问题描述:
我想使一个文本视图显示我选择的项目,但我试图实现的代码没有工作。我也想弄清楚如何显示最终选项 - 有一个主要列表,并且在从主列表中选择一个项目后,它将带您到另一个列表,您可以在其中进行最终选择(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);
}
}
});
}}
答
请注意,您不能直接使用此示例代码。您需要根据您在其他活动Main2Activity
和Main3Activity
中所做的更改进行更改。
首先从MainActivity
中删除这两行代码,因为我没有看到您发送MainActivity
任何东西。
Intent myintent = getIntent();
String value = myintent.getStringExtra("myintent");
在任一Main2Activity
或Main3Activity
的onItemClick
方法检索您选择的值:
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);
你得到任何错误? –
为什么你用“startActivityForResult”?是你通过适配器的位置与“startActivityForResult(myintent,1);”这个代码? –
您只显示您的MainActivity,我认为这是您启动应用程序时启动的Activity。那么你期望从这段代码中'value'找到什么?String value = myintent.getStringExtra(“myintent”);'? – Barns