【发布时间】:2016-10-20 20:45:11
【问题描述】:
您好,我在 android 中制作了一个简单的应用程序,它连接到服务器并获取帖子列表,然后我有一个 spinner,其中填充了每个帖子的标题,您可以选择其中一个。
这一切都有效,直到我必须选择一个帖子,我打开spinner,它显示了我选择一个的所有标题,没有任何反应,帖子没有在spinner 中选择并且文本没有'不要改变,我读了 10 篇关于微调器没有显示项目但我无法使其工作的帖子,请帮助我,这是我的 java 代码:
package com.example.lagarto.blog;
import android.graphics.Color;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import org.w3c.dom.Text;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import android.util.Log;
import android.widget.Spinner;
public class MainActivity extends AppCompatActivity {
ArrayList<Post> archivo=new ArrayList<Post>();
ArrayList<String> titulos=new ArrayList<String>();
public ArrayAdapter<String> spinnerArrayAdapter;
private static final String TAG= MainActivity.class.getSimpleName();
private class GetDBConnection extends AsyncTask<Integer, Void, String>{
@Override
protected String doInBackground(Integer... params) {
try{
Connection conn= DBConnection.getInstance().getConnection();
Statement st= conn.createStatement();
String sql=("SELECT * FROM posts");
ResultSet rs=st.executeQuery(sql);
while(rs.next()) {
int id = rs.getInt("Id");
String title = rs.getString("Title");
String body = rs.getString("Body");
String date = rs.getString("Date");
Post post = new Post(id, title, body, date);
archivo.add(post);
System.out.println(archivo);
}
Log.d(TAG,"Terminado");
}catch(SQLException e){
e.printStackTrace();
}
return "Valido";
}
@Override
protected void onPostExecute(String result) {
Spinner spinner=(Spinner) findViewById(R.id.spinner);
spinner.setVisibility(View.VISIBLE);
for (Post i:archivo) {
titulos.add(i.getTitle());
}
TextView title=(TextView) findViewById(R.id.title);
TextView body=(TextView) findViewById(R.id.body);
title.setVisibility(View.VISIBLE);
body.setVisibility(View.VISIBLE);
TextView connection=(TextView) findViewById(R.id.connection);
connection.setVisibility(View.INVISIBLE);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
spinnerArrayAdapter.notifyDataSetChanged();
Post resultado=archivo.get(position);
title.setText(resultado.getTitle());
body.setText(resultado.getBody());
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
spinnerArrayAdapter.notifyDataSetChanged();
Post resultado=archivo.get(0);
title.setText(resultado.getTitle());
body.setText(resultado.getBody());
}
});
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new GetDBConnection().execute(0);
Spinner spinner=(Spinner) findViewById(R.id.spinner);
spinnerArrayAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, titulos);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter);
spinner.setSelection(1);
System.out.println(archivo);
}
}
这是我的 xml 代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.lagarto.blog.MainActivity">
<TextView
android:layout_width="400dp"
android:layout_height="50dp"
android:text="Hello World!"
android:textSize="30dp"
android:textAlignment="center"
android:layout_alignParentEnd="true"
android:id="@+id/title"
android:layout_marginTop="40dp"
android:visibility="invisible"
/>
<TextView
android:layout_width="400dp"
android:layout_height="500dp"
android:text="Hello World!"
android:textSize="16dp"
android:layout_marginTop="100dp"
android:layout_alignParentEnd="true"
android:id="@+id/body"
android:visibility="invisible"
/>
<Spinner
android:layout_width="400dp"
android:layout_height="50dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:id="@+id/spinner"
android:textSize="20dp"
android:visibility="invisible"
android:backgroundTint="@color/colorPrimaryDark"
android:textAlignment="center"
/>
<TextView
android:text="Waiting for connection please wait"
android:layout_width="400dp"
android:layout_height="100dp"
android:textSize="30dp"
android:textAlignment="center"
android:layout_marginTop="150dp"
android:id="@+id/connection" />
</RelativeLayout>
【问题讨论】:
-
我认为如果你把
spinner.setOnItemSelectedListener放在onCreate上会更好。您应该集中获取数据的后台进程。 -
它没有修复错误:/
-
奇怪...
onPostExecute完成后您是否得到任何 logcat? -
因为我怀疑
spinner.setSelection(1);将返回IndexOutOfBoundsException,因为您的AsyncTask尚未完成......
标签: java android xml android-layout spinner