ListView에 버튼을 넣으려면 커스터마이징을 해야한다. BaseAdapter를 상속받아 Adapter를 커스텀하고

아래와 같이 이벤트 리스너를 등록을하면 버튼은 작동을 하지만 리스트가 클릭이 되지 않는 문제가 생긴다.


ListView.setOnItemClickListener()

ListView.setOnItemLongClickListener()


구글링 결과 커스텀 리스트에 버튼이 들어있을경우 모든 이벤트를 버튼이 흡수해버린다.
ImageButton으로 되어있는걸 ImageView로 변경하고 ImageView에 android:clickable="true" 옵션을 주니
이벤트 리스너가 정상작동한다.








커스텀 리스트뷰를 만들어 적용 후 데이터를 넣고 스크롤을 했더니 아이템 위치가 변경되는 현상이 발견.

생성한 Adapter의 getView에 홀더를 추가하여 데이터 변형을 방지 하였다.


@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		final int pos = position;
		
		CustomViewHolder holder;

		if ( convertView == null ) {
			.. 생략
			final TextView textview = (TextView)convertView.findViewById(R.id.custom_word_text);
			textview.setText( m_List.get(pos).getWord() );

			ImageButton btn = (ImageButton) convertView.findViewById(R.id.custom_word_listen);

			holder = new CustomViewHolder();
			holder.m_TextView	= textview;
			holder.m_ImgBtn		= btn;
			
			convertView.setTag(holder);
		}
		else {
			holder = (CustomViewHolder) convertView.getTag();
		}

		if ( m_List.get(pos).isVisibleWord() ) {
			holder.m_TextView.setText(m_List.get(pos).getWord());
		}
		else
			holder.m_TextView.setText(m_List.get(pos).getMeaning());
			
		return convertView;
	}
	
	public class CustomViewHolder {
		public TextView		m_TextView;
		public ImageButton	m_ImgBtn;
	}







Jni를 사용할때 Java를 거치지 않고 Asset파일에 접근 할 수 있다.

먼저 Java에서 Context.getAssets();을 사용하여 AssetManager를 보내준다.

	private static native void nativeCreated(AssetManager asset);

jni.c

#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
AAssetManager	*mgr;

void Java_pe_berabue_ex_GLView_nativeCreated(JNIEnv * env, jclass cls, jobject assetManager)
{
	char *buf;
	int fileSize;

	mgr = AAssetManager_fromJava(GetEnv(), assetManager);

	AAsset* asset = AAssetManager_open(mgr, "tmp.txt", AASSET_MODE_UNKNOWN);	// Asset 폴더안에 tmp.txt가 존재하면

	if ( asset == NULL )
		return;
	
	fileSize = AAsset_getLength(asset);
	
	if ( fileSize == 0 )
		return;
	
	buf = (char *)malloc(sizeof(char)*fileSize);
	AAsset_read(asset, buf, fileSize);
	
	AAsset_close(asset);
}

최소한의 소스만 적어보자면 위와 같다.

헤더파일을 포함시키고 Java에서 받아온 assetManager를 사용하면 된다.


android:minSdkVersion 9 이상 사용가능






다운로드 하기

 http://www.mantisbt.org/download.php 다운 받을 파일의 URL을 복사

 # wget 해당URL

 # tar xvzf 다운로드 받은 파일

 위 명령어를 이용하여 다운로드 및 압축을 해제한다.


설치하기 (웹 폴더안에 mantis를 만들어 압축을 해제해 놓음)

 http://도메인/mantis/admin/install.php 접속

 기본 정보 입력(기본 세팅에 DB비밀번호만 입력함) 후 install/Upgrade Database 버튼 클릭


 스크롤을 쭈욱 내리다 보면

 Write Configuration File(s)

 위 부분에 에러가 났다면

 # cp config_inc.php.sample config_inc.php 명령어를 사용하여 파일 복사

 # vi config_inc.php

 파일을 열어서 웹사이트에 나와있는


$g_hostname = 'localhost';

$g_db_type = 'mysql';

$g_database_name = 'bugtracker';

$g_db_username = 'root';

$g_db_password = '블라블라';


이 부분을 복사하여 붙여넣기, 바로 아래 이메일 부분에 적당히 적어준다.

한글을 사용하기위해 적당한 곳에 $g_default_language = "korean"; 입력 후 저장


웹페이지를 새로고침하면 해당 오류가 사라진다.


도메인/mantis 접속 시 로그인 페이지로 전환된다.



admin 폴더 삭제

 # rm -dfr admin/

 설치 완료 후 위 명령어를 사용하여 admin 폴더를 제거한다.



administrator 비밀번호 변경

 계정 administrator 비밀번호 root로 로그인을 하고 비밀번호를 변경한다.



설치 끝!




+ Recent posts