그래서 데이터베이스에서 읽고 DB의 내용을 목록보기로 인쇄하는 프로젝트 응용 프로그램을 작성했습니다. 이제 더 많은 열을 인쇄하고 싶습니다. 인쇄중인 행에 두 개의 버튼과 edittext를 추가하고 싶습니다. 내가 사용하고자하는 새로운 xml 파일을 만들었지 만 새로운 레이아웃을이 xml 파일로 설정하려고하면 작동하지 않습니다. 누구든지 내 문제를 해결하는 방법을 설명하거나 보여 줄 수 있습니까? 내가하려고 할 때 Android 용 사용자 정의 XML 레이아웃
이
내가 각 행<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView android:id="@+id/item1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:paddingBottom="5dp"
android:hint="@string/hint"/>
<Button
android:id="@+id/plusButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/plusButton"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<EditText
android:id="@+id/edit1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/hint"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/minusButton"
android:layout_toStartOf="@+id/minusButton"
android:layout_marginRight="30dp" />
<Button
android:id="@+id/minusButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/minusButton"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
에 사용할 XML 레이아웃입니다 그리고 이것은 내가 SQLite 데이터베이스의 내용을 표시하고있는 클래스이며, 오류가 라인 (100)에서 발생 row.xml 파일
package com.example.rory.dbtest;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import com.pinchtapzoom.R;
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Button addBtn = (Button)findViewById(R.id.add);
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MyActivity.this, addassignment.class);
startActivity(i);
}
});
Button deleteBtn = (Button)findViewById(R.id.delete);
deleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MyActivity.this, Delete.class);
startActivity(i);
}
});
Button updateBtn = (Button)findViewById(R.id.update);
updateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MyActivity.this, Update.class);
startActivity(i);
}
});
try {
String destPath = "/data/data/" + getPackageName() + "/databases/AssignmentDB";
File f = new File(destPath);
if (!f.exists()) {
CopyDB(getBaseContext().getAssets().open("mydb"),
new FileOutputStream(destPath));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
com.example.rory.dbtest.DBAdapter db = new com.example.rory.dbtest.DBAdapter(this);
db.open();
ArrayList<String> data_list=new ArrayList<String>();
ListView lv=(ListView)findViewById(R.id.listView1);
Cursor c = db.getAllRecords();
if (c.moveToFirst())
{
do {
data_list.add(c.getString(2));
//data_list.add(c.getString(1));
//DisplayRecord(c);
} while (c.moveToNext());
}
ArrayAdapter<String> aa=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.row, data_list);
lv.setAdapter(aa);
}
private class DBAdapter extends BaseAdapter {
private LayoutInflater mInflater;
//private ArrayList<>
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
return null;
}
}
public void CopyDB(InputStream inputStream, OutputStream outputStream)
throws IOException {
//---copy 1K bytes at a time---
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
}
public void DisplayRecord(Cursor c)
{
Toast.makeText(this,
"id: " + c.getString(0) + "\n" +
"Item: " + c.getString(1) + "\n" +
"Litres: " + c.getString(2),
Toast.LENGTH_SHORT).show();
}
}
나의 새로운 사용자 정의 어댑터 클래스 패키지 com.example.rory.dbtest에 android.R.layout을 변경;
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.TextView;
import com.pinchtapzoom.R;
/**
* Created by Rory on 07/11/2014.
*/
public class MyCustomAdapter extends CursorAdapter {
DBAdapter db = new DBAdapter(this);
private LayoutInflater cursorInflater;
public MyCustomAdapter(Context context, Cursor c) {
super(context, c);
cursorInflater = (LayoutInflater) context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {
return cursorInflater.inflate(R.layout.row, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView textViewTitle = (TextView) view.findViewById(R.id.row);
String title = cursor.getString(cursor.getColumnIndex(DATABASE_TABLE.KEY_ITEM))
textViewTitle.setText(title);
}
}
답장을 보내 주셔서 감사합니다. 그걸 확인해 보겠습니다. –
내가 필요한 어댑터를 만들었지 만, 구현 방법을 확실히 모르겠다. 안드로이드와이 개념에 아주 익숙하다. 또는 그것을 올바르게하는 방법을 보여줘야합니까? –
여러 번 물어 왔습니다. 구글 '사용자 지정 listadapter를 만들'그리고 당신은 방법을 알아낼 것입니다. 이 자습서 http://www.vogella.com/tutorials/AndroidListView/article.html을 확인하십시오. – Darpan