Подмена разметка в адаптере
Подмена разметка в адаптере
Доброго времени суток форумчане
Есть какой то адаптер в нем прописывается разметка и поля из бд
Допустим имеем три поля _id, name, signal
в поле signal прописываем значения (например 1 или 2)
Вопрос:
Как сделать так чтобы имея значение поля signal "1" вставлялась одна разметка, имея значение "2" вставлялась другая разметка
Буду рад ссылкам на инфу)
Заранее благодарю
Есть какой то адаптер в нем прописывается разметка и поля из бд
Допустим имеем три поля _id, name, signal
в поле signal прописываем значения (например 1 или 2)
Вопрос:
Как сделать так чтобы имея значение поля signal "1" вставлялась одна разметка, имея значение "2" вставлялась другая разметка
Буду рад ссылкам на инфу)
Заранее благодарю
Re: Подмена разметка в адаптере
Делаешь свой кастомный адаптер. В методе getView или bindView (смотря какой адаптер используешь) уже в зависимости от данных подсовываешь нужный бэкграунд.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Подмена разметка в адаптере
А есть какой нибудь ресурс (книга, сайт...)? где развернуто показано что такое адаптер и с чем его едят. Просто погуглив наталкиваюсь на готовые примеры, что в итоге привело меня к неопределенности и запутанности.
Re: Подмена разметка в адаптере
Да вы батенька видно ничего про if не слышали? Чем не нравится описание использования адаптера из этого сайта? По моему здесь все "разжовано" достаточно подробно что бы понять как это все работает.alexmx писал(а):А есть какой нибудь ресурс (книга, сайт...)? где развернуто показано что такое адаптер и с чем его едят. Просто погуглив наталкиваюсь на готовые примеры, что в итоге привело меня к неопределенности и запутанности.
http://startandroid.ru/ru/uroki/vse-uro ... apter.html
Re: Подмена разметка в адаптере
СлышалДа вы батенька видно ничего про if не слышали?
Здесь идет работа с массивом, а мне нужна работа с курсором. Поэтому и прошу источник из которого можно почерпнуть всю логику работы адаптеров.Чем не нравится описание использования адаптера из этого сайта? По моему здесь все "разжовано" достаточно подробно что бы понять как это все работает.
http://startandroid.ru/ru/uroki/vse-uro ... apter.html
Пока остановился на этом http://thinkandroid.wordpress.com/2010/ ... radapters/
Re: Подмена разметка в адаптере
В общем накодил следующее:
Активность
[syntax=java]package ru.myscanner.scannerth;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.widget.ListView;
public class MainActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {
ScannerListCursorAdapter adapter;
final static Uri CATALOG_URI = Uri.parse("content://ru.htsprovider.htspdata/catalogtable");
static final String CATALOG_NAME = "catalogname";
static final String NAME_STATUS = "nstatus";
ListView lvData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startService(new Intent(this, CatalogService.class));
adapter = new ScannerListCursorAdapter(this, R.layout.item, null, null, null);
lvData = (ListView) findViewById(R.id.lvData);
lvData.setAdapter(adapter);
getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
return(new CursorLoader(this, CATALOG_URI, null, null, null, null));
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
adapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
}
[/syntax]
Адаптер
[syntax=java]package ru.myscanner.scannerth;
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.support.v4.widget.SimpleCursorAdapter;
import android.widget.Filterable;
import android.widget.TextView;
public class ScannerListCursorAdapter extends SimpleCursorAdapter implements Filterable {
static final String CATALOG_NAME = "catalogname";
static final String NAME_STATUS = "nstatus";
private int layout;
public ScannerListCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
this.layout = layout;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
Cursor c = getCursor();
final LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(layout, parent, false);
int nameCol = c.getColumnIndex(CATALOG_NAME);
String name = c.getString(nameCol);
int statCol = c.getColumnIndex(NAME_STATUS);
String nameStatCol = c.getString(statCol);
TextView name_text = (TextView) v.findViewById(R.id.tvText);
TextView stat_name_col = (TextView) v.findViewById(R.id.tvTextCol);
if (name_text != null) {
name_text.setText(name);
}
if(stat_name_col != null){
stat_name_col.setText("no");
}
return v;
}
@Override
public void bindView(View v, Context context, Cursor c) {
int nameCol = c.getColumnIndex(CATALOG_NAME);
String name = c.getString(nameCol);
int statCol = c.getColumnIndex(NAME_STATUS);
String nameStatCol = c.getString(statCol);
TextView name_text = (TextView) v.findViewById(R.id.tvText);
TextView stat_name_col = (TextView) v.findViewById(R.id.tvTextCol);
if (name_text != null) {
name_text.setText(name);
}
if(stat_name_col != null){
stat_name_col.setText("no");
}
}
}
[/syntax]
адаптер пока для пробы))
Выкидывает портянку:
Активность
[syntax=java]package ru.myscanner.scannerth;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.widget.ListView;
public class MainActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {
ScannerListCursorAdapter adapter;
final static Uri CATALOG_URI = Uri.parse("content://ru.htsprovider.htspdata/catalogtable");
static final String CATALOG_NAME = "catalogname";
static final String NAME_STATUS = "nstatus";
ListView lvData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startService(new Intent(this, CatalogService.class));
adapter = new ScannerListCursorAdapter(this, R.layout.item, null, null, null);
lvData = (ListView) findViewById(R.id.lvData);
lvData.setAdapter(adapter);
getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
return(new CursorLoader(this, CATALOG_URI, null, null, null, null));
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
adapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
}
[/syntax]
Адаптер
[syntax=java]package ru.myscanner.scannerth;
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.support.v4.widget.SimpleCursorAdapter;
import android.widget.Filterable;
import android.widget.TextView;
public class ScannerListCursorAdapter extends SimpleCursorAdapter implements Filterable {
static final String CATALOG_NAME = "catalogname";
static final String NAME_STATUS = "nstatus";
private int layout;
public ScannerListCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
this.layout = layout;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
Cursor c = getCursor();
final LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(layout, parent, false);
int nameCol = c.getColumnIndex(CATALOG_NAME);
String name = c.getString(nameCol);
int statCol = c.getColumnIndex(NAME_STATUS);
String nameStatCol = c.getString(statCol);
TextView name_text = (TextView) v.findViewById(R.id.tvText);
TextView stat_name_col = (TextView) v.findViewById(R.id.tvTextCol);
if (name_text != null) {
name_text.setText(name);
}
if(stat_name_col != null){
stat_name_col.setText("no");
}
return v;
}
@Override
public void bindView(View v, Context context, Cursor c) {
int nameCol = c.getColumnIndex(CATALOG_NAME);
String name = c.getString(nameCol);
int statCol = c.getColumnIndex(NAME_STATUS);
String nameStatCol = c.getString(statCol);
TextView name_text = (TextView) v.findViewById(R.id.tvText);
TextView stat_name_col = (TextView) v.findViewById(R.id.tvTextCol);
if (name_text != null) {
name_text.setText(name);
}
if(stat_name_col != null){
stat_name_col.setText("no");
}
}
}
[/syntax]
адаптер пока для пробы))
Выкидывает портянку:
- 03-26 13:43:48.554: E/AndroidRuntime(15764): FATAL EXCEPTION: main
03-26 13:43:48.554: E/AndroidRuntime(15764): java.lang.NullPointerException
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.support.v4.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:312)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.support.v4.widget.SimpleCursorAdapter.swapCursor(SimpleCursorAdapter.java:328)
03-26 13:43:48.554: E/AndroidRuntime(15764): at ru.myscanner.scannerth.MainActivity.onLoadFinished(MainActivity.java:46)
03-26 13:43:48.554: E/AndroidRuntime(15764): at ru.myscanner.scannerth.MainActivity.onLoadFinished(MainActivity.java:1)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.support.v4.app.LoaderManagerImpl$LoaderInfo.callOnLoadFinished(LoaderManager.java:427)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.support.v4.app.LoaderManagerImpl$LoaderInfo.onLoadComplete(LoaderManager.java:395)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.support.v4.content.Loader.deliverResult(Loader.java:104)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.support.v4.content.CursorLoader.deliverResult(CursorLoader.java:73)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.support.v4.content.CursorLoader.deliverResult(CursorLoader.java:35)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.support.v4.content.AsyncTaskLoader.dispatchOnLoadComplete(AsyncTaskLoader.java:223)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.support.v4.content.AsyncTaskLoader$LoadTask.onPostExecute(AsyncTaskLoader.java:61)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.support.v4.content.ModernAsyncTask.finish(ModernAsyncTask.java:461)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.support.v4.content.ModernAsyncTask.access$500(ModernAsyncTask.java:47)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.support.v4.content.ModernAsyncTask$InternalHandler.handleMessage(ModernAsyncTask.java:474)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.os.Handler.dispatchMessage(Handler.java:99)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.os.Looper.loop(Looper.java:137)
03-26 13:43:48.554: E/AndroidRuntime(15764): at android.app.ActivityThread.main(ActivityThread.java:4745)
03-26 13:43:48.554: E/AndroidRuntime(15764): at java.lang.reflect.Method.invokeNative(Native Method)
03-26 13:43:48.554: E/AndroidRuntime(15764): at java.lang.reflect.Method.invoke(Method.java:511)
03-26 13:43:48.554: E/AndroidRuntime(15764): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-26 13:43:48.554: E/AndroidRuntime(15764): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-26 13:43:48.554: E/AndroidRuntime(15764): at dalvik.system.NativeStart.main(Native Method)
Re: Подмена разметка в адаптере
Извиняюсь нашел
adapter = new ScannerListCursorAdapter(this, R.layout.item, null, null, null);
adapter = new ScannerListCursorAdapter(this, R.layout.item, null, null, null);
Re: Подмена разметка в адаптере
Принцип работы одинаковый. Адаптер он и в африке адаптер, так как родитель у всех одинаковый.alexmx писал(а):Здесь идет работа с массивом, а мне нужна работа с курсором. Поэтому и прошу источник из которого можно почерпнуть всю логику работы адаптеров
В LogCat два раза клацаешь по ошибке и попадаешь на строку.alexmx писал(а):Вижу что приходит null, но не могу понять откуда
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Подмена разметка в адаптере
СпасибоВ LogCat два раза клацаешь по ошибке и попадаешь на строку.
Чуть позже выложу что получилось
Re: Подмена разметка в адаптере
Так что то я заблудился. Допустим есть разметка
[syntax=xml]<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layoutAnimation="@anim/controller_text_view"
android:orientation="vertical">
<TextView
android:id="@+id/tvText"
android:layout_width="140pt"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp">
</TextView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tvTextCol"
android:layout_width="40pt"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@drawable/rectangle_rounded_all"
android:textColor="#FFFFFF"
android:gravity="center"
android:layout_marginRight="1dp"
android:textSize="14sp">
</TextView>
<TextView
android:id="@+id/tvTextCol1"
android:layout_width="40pt"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@drawable/rectangle_rounded_all"
android:textColor="#FFFFFF"
android:gravity="center"
android:layout_marginRight="1dp"
android:textSize="14sp">
</TextView>
<TextView
android:id="@+id/tvTextCol2"
android:layout_width="40pt"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@drawable/rectangle_rounded_all"
android:textColor="#FFFFFF"
android:gravity="center"
android:textSize="14sp">
</TextView>
</LinearLayout>
</LinearLayout>[/syntax]
Это все попадает в ListView, но как теперь подменить TextView в данной разметке. Или это как то по другому делается?
[syntax=xml]<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layoutAnimation="@anim/controller_text_view"
android:orientation="vertical">
<TextView
android:id="@+id/tvText"
android:layout_width="140pt"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp">
</TextView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tvTextCol"
android:layout_width="40pt"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@drawable/rectangle_rounded_all"
android:textColor="#FFFFFF"
android:gravity="center"
android:layout_marginRight="1dp"
android:textSize="14sp">
</TextView>
<TextView
android:id="@+id/tvTextCol1"
android:layout_width="40pt"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@drawable/rectangle_rounded_all"
android:textColor="#FFFFFF"
android:gravity="center"
android:layout_marginRight="1dp"
android:textSize="14sp">
</TextView>
<TextView
android:id="@+id/tvTextCol2"
android:layout_width="40pt"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@drawable/rectangle_rounded_all"
android:textColor="#FFFFFF"
android:gravity="center"
android:textSize="14sp">
</TextView>
</LinearLayout>
</LinearLayout>[/syntax]
Это все попадает в ListView, но как теперь подменить TextView в данной разметке. Или это как то по другому делается?
Re: Подмена разметка в адаптере
То есть можно ли создать LinearLayout с настройками а в зависимости от данных в адаптере толкать в него ссылки например TextView???
Re: Подмена разметка в адаптере
Нет не так нужно в TextView подгрузить фон в виде фигуры xml (зависит от данных), и вставить текст
Я так понимаю надо это:
setBackground(R.drawable.rectangle_rounded_all)
Только как это реализовать?
Я так понимаю надо это:
setBackground(R.drawable.rectangle_rounded_all)
Только как это реализовать?
Re: Подмена разметка в адаптере
Всё понял как:
[syntax=java]if(nameStatCol == null){
stat_name_col.setText("технология");
stat_name_col.setBackgroundResource(R.drawable.rectangle_rounded_all_green);
}[/syntax]
[syntax=java]if(nameStatCol == null){
stat_name_col.setText("технология");
stat_name_col.setBackgroundResource(R.drawable.rectangle_rounded_all_green);
}[/syntax]