在详细介绍我遇到的问题之前,我对Android开发很新,所以让我先解释一下我想要实现的目标以及我试图做的事情。
我正在使用android 4.0操作系统在eclipse IDE中创建一个Android应用程序,我想在这个应用程序中创建的是一个窗口滚动视图,其中包含各种不同的小部件,如复选框,文本视图和编辑文本。这些编辑文本是必需的,以便用户可以输入关于在应用页面上的图像视图中显示但不在滚动视图内的图像的一些数据。然后用户按下按钮,然后将数据存储在某处(我知道我想用它做什么)并且会出现一个新图像,然后重复该过程。
现在为了创建一个窗口滚动视图,我知道您需要在滚动视图中定义小部件并能够正确向下滚动它们是通过在线性布局中定义它们然后弄乱边缘顶部活动xml文件中每个小部件中的值。
然而,一旦我创建这些小部件尝试测试,这就是我遇到一些问题的地方。
首先,如果一个小部件放在页眉和页脚之间(应用程序页面上显示的区域,并用作窗口滚动视图的一部分),我尝试测试滚动,滚动工作,但它创建一个随机该小部件的副本,我无法摆脱,例如http://community.dur.ac.uk/cs.seg05/androidapp/exhibit_A.JPG(我无法直接向您显示图像,因为我的排名不够高,无法在StackOverflow上显示图像)
为了尝试解决这个问题,我决定将所有内容移动到scrollview的页脚下方,然后从那里向上滚动,这似乎有效。
不幸的是,当我尝试在我的编辑文本中测试输入时,我遇到了另一个恼人的问题。
当我完成输入编辑文本并单击软键盘上的下一个按钮时,应用程序将我引导到另一个我未定义的编辑文本并显示另一个软键盘,这反过来又创建了一个副本当前显示在scrollview窗口内的窗口小部件(包括该编辑文本)。 (我已向上滚动以获取此编辑文本)例如 https://community.dur.ac.uk/cs.seg05/androidapp/test.JPG
然后,我查看了诸如Scrolling EditText on ScrollView programmatically,How to prevent auto scrolling of EditText when keyboard appears on Android?,Enable Scrolling within EditText that is in a ScrollView
等问题但这些都没有真正帮助我。
我也尝试使用AutoTextCompleteView小部件作为用户woudl用作输入的小部件,但我不完全理解它们是如何工作的,我无法从它们那里获取任何数据,因为当我输入内容时,程序返回没有输入任何内容。
我真的很感激一些帮助,因为我不知道我是否遗漏了什么,或者我是否没有正确设置小部件,或者我没有正确设置滚动视图所以如果你们中有人有对这些问题的任何解决方案,请发布它们(代码或一步一步会非常有帮助)。
这是我的活动中的java代码(请注意,这是第一个活动完成后启动的第二个活动)。
package com.example.hello;
import android.app.Activity;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import android.os.Build;
import android.widget.AdapterView.OnItemClickListener;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;
public class SecondActivity extends Activity {
private String userId; //global variable as it will be used throughout this activity
private ArrayList <String> imageNames;
private String directory="http://community.dur.ac.uk/cs.seg05/Wild/CameraImages/";
private int imageNumber=0;
private CheckBox humanTest;
private ArrayList<String> pictureIds;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Bundle data = getIntent().getExtras(); //obtains information passed from the previous activity
userId= data.getString("userId"); //gets the user id from the main activity
System.err.println("Received User id " +userId);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
imageNames =getImages(userId); //gets all of the image names from the database
System.err.println(imageNames);
getNextImage(imageNumber, imageNames); //method that obtains the next image
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.second, 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);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_second,
container, false);
return rootView;
}
}
public ArrayList<String> getImages(String userid) { // method that gets images from a php file
ArrayList<String> images= new ArrayList<String>();
pictureIds= new ArrayList<String> ();
try {
HttpClient httpclient= new DefaultHttpClient();
URI website= new URI("https://community.dur.ac.uk/cs.seg05/androidapp/ImageAccess.php?userid="+userid);
HttpGet request= new HttpGet();
request.setURI(website);
HttpResponse response = httpclient.execute(request);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb=new StringBuffer("");
String l= "";
String nl= System.getProperty("line.separator");
while ((l = reader.readLine()) != null) { //converts the whole output into a string
sb.append(l+ nl);
}
reader.close();
String result=sb.toString();
JSONArray jArray = new JSONArray(result);
System.err.println(jArray.length());
for(int i=0;i<jArray.length();i++){ //retrieves the JSon
JSONObject json_data = jArray.getJSONObject(i);
System.err.println(json_data);
images.add(json_data.getString("File_Name"));
pictureIds.add(json_data.getString("Picture_ID"));
}
}
catch (Exception e) {
System.err.println(e);
}
return images;
}
public static Bitmap getBitmapFromURL(String src) {
try {
java.net.URL url = new java.net.URL(src);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public void getNextImage(int number, ArrayList<String> images) { //method that gets the images
if (number>=images.size()) {
String whitespace="http://www.skettymethodistchurch.org.uk/whitespace.jpg" ; //whitespace for when user has finished the subset of images
Bitmap bm= getBitmapFromURL(whitespace);
ImageView iv= (ImageView)findViewById(R.id.imageView1); //gets the image view
iv.setImageBitmap(bm);
}
else {
String image=images.get(number);
String request=directory+image;
Bitmap bm= getBitmapFromURL(request);
ImageView iv= (ImageView)findViewById(R.id.imageView1); //gets the image view
iv.setImageBitmap(bm);
imageNumber++;
}
}
public void loadNextImage(View view) { //method for when the next button is clicked
try {
// humanTest = (CheckBox) findViewById(R.id.checkBox1);
ImageView iv= (ImageView)findViewById(R.id.imageView1); //gets the image view
iv.setImageBitmap(null);
getNextImage(imageNumber, imageNames);
}
catch (Exception e) {
System.err.println(e);
}
}
public void LoadHelpActivity(View view) {
Intent i = new Intent(getBaseContext(), HelpActivity.class);
startActivity(i);
}
public void getScore(View view) {
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
}
}
以下是与此活动相关联的xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="com.example.hello.SecondActivity"
tools:ignore="MergeRootFrame" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="315dp"
android:layout_height="150dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="38dp" />
<!-- Header aligned to top -->
<RelativeLayout
android:id="@+id/header"
android:layout_width="315dp"
android:layout_height="35dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:gravity="center" >
<TextView
android:layout_width="355dp"
android:layout_height="25dp"
android:layout_marginTop="0dp"
android:text="Scroll up to classify the contents of the image"
android:textColor="#000"
android:textSize="14sp" />
</RelativeLayout>
<!-- Footer aligned to bottom -->
<RelativeLayout
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
/>
</RelativeLayout>
<ScrollView
android:id="@+id/scrollableContents"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_above="@id/footer"
android:layout_below="@id/header"
android:isScrollContainer="false"
android:fillViewport="true"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical" >
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp"
android:text="Humans in image" />
<EditText
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="text"
android:layout_marginTop="30dp"
android:ems="13"
/>
<Button
android:id="@+id/button1"
android:layout_width="95dp"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_centerHorizontal="true"
android:onClick="loadNextImage"
android:text="@string/classify" />
</LinearLayout>
</ScrollView>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:onClick="LoadHelpActivity"
android:text="Help" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_alignLeft="@+id/imageView1"
android:layout_alignParentTop="true"
android:layout_marginLeft="22dp"
android:onClick="getScore"
android:text="Check score" />
</RelativeLayout>
最后,这是android清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hello"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="14" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.hello.MainActivity"
android:label="Wild Eyes" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.hello.SecondActivity"
android:label="Wild Eyes" >
</activity>
<activity
android:name="com.example.hello.HelpActivity"
android:label="Wild Eyes" >
</activity>
</application>
</manifest>
如果有什么我错过了并且这将是有益的,请告诉我,我会发布。
由于
汤姆