2014-11-07 2 views
0

그래서 데이터베이스에서 읽고 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); 

} 
} 

답변

0

귀하의 질문은 이전에 여러 번 물었습니다. Check this link refular ArrayAdapter을 사용하는 대신 사용자 지정 어댑터 클래스를 만들고 목록 항목에보기를 채워야합니다.

+0

답장을 보내 주셔서 감사합니다. 그걸 확인해 보겠습니다. –

+0

내가 필요한 어댑터를 만들었지 만, 구현 방법을 확실히 모르겠다. 안드로이드와이 개념에 아주 익숙하다. 또는 그것을 올바르게하는 방법을 보여줘야합니까? –

+0

여러 번 물어 왔습니다. 구글 '사용자 지정 listadapter를 만들'그리고 당신은 방법을 알아낼 것입니다. 이 자습서 http://www.vogella.com/tutorials/AndroidListView/article.html을 확인하십시오. – Darpan

관련 문제