2016-05-20 6 views
0

カスタムリストビューのTextviewの色を変更する際に問題があります。カスタムアダプタとカスタムレイアウトファイルを持つカスタムリストビューのTextviewの色とサイズを変更します

私のxmlファイルは

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:id="@+id/cid" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.5" 
     android:textSize="30dp" 
     android:visibility="gone"/> 

    <TextView 
     android:id="@+id/cname" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textSize="25dp" 
     android:textColor="#f60505" /> 

    <TextView 
     android:id="@+id/amt" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textSize="15dp" 
     android:textColor="#2ec31d" 
     android:textAlignment="center" /> 

</LinearLayout> 

column.xmlあるとListViewAdapter.javaこの

package accounts.com.accountbook; 

import static accounts.com.accountbook.Constants.FIRST_COLUMN; 
import static accounts.com.accountbook.Constants.SECOND_COLUMN; 
import static accounts.com.accountbook.Constants.THIRD_COLUMN; 

import android.app.Activity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

/** 
* Created by XYZ on 06-05-2016. 
*/ 
public class ListViewAdapter extends BaseAdapter { 
    public ArrayList<HashMap<String,String>> list; 
    Activity activity; 
    TextView txtFirst; 
    TextView txtSecond; 
    TextView txtThird; 



    public ListViewAdapter(Activity activity,ArrayList<HashMap<String,String>>list){ 
     super(); 
     this.activity=activity; 
     this.list=list; 
    } 


    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return list.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = activity.getLayoutInflater(); 

     ViewHolder holder; 

     if (convertView == null){ 

      convertView = inflater.inflate(R.layout.colunm_row,null); 

      holder = new ViewHolder(); 

      holder.textFirst=(TextView)convertView.findViewById(R.id.cid); 
      holder.textSecond=(TextView)convertView.findViewById(R.id.cname); 
      holder.textThird=(TextView)convertView.findViewById(R.id.amt); 

      txtFirst = (TextView) convertView.findViewById(R.id.cid); 
      txtSecond = (TextView)convertView.findViewById(R.id.cname); 
      txtThird = (TextView) convertView.findViewById(R.id.amt); 

      convertView.setTag(holder); 
     }else { 
      holder =(ViewHolder)convertView.getTag(); 
      holder.textFirst.setText(""); 
      holder.textSecond.setText(""); 
      holder.textThird.setText(""); 
     } 

     HashMap<String,String> map= list.get(position); 
     /* txtFirst.setText(map.get(FIRST_COLUMN)); 
     txtSecond.setText(map.get(SECOND_COLUMN)); 
     txtThird.setText(map.get(THIRD_COLUMN));*/ 


     holder.textFirst.setText(map.get(FIRST_COLUMN)); 
     holder.textSecond.setText(map.get(SECOND_COLUMN)); 
     holder.textThird.setText(map.get(THIRD_COLUMN)); 

     return convertView; 
    } 


    static class ViewHolder{ 
     TextView textFirst; 
     TextView textSecond; 
     TextView textThird; 
    } 
} 

DisplayActivityのようになります:私は別の3に同じレイアウトファイルを使用しています

package accounts.com.accountbook; 
import static accounts.com.accountbook.Constants.FIRST_COLUMN; 
import static accounts.com.accountbook.Constants.SECOND_COLUMN; 
import static accounts.com.accountbook.Constants.THIRD_COLUMN; 

import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.graphics.Color; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.TypedValue; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Map; 

public class AccDisplay extends AppCompatActivity { 

    private ArrayList<HashMap<String,String>> arrayList; 
    Cursor c; 
    SQLiteDatabase db; 
    DBHelper dbHelper; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_acc_display); 

     ListView listView = (ListView)findViewById(R.id.AcclistView); 

     arrayList = new ArrayList<HashMap<String, String>>(); 
     db = openOrCreateDatabase("AccountsDB", Context.MODE_PRIVATE,null); 


     c=db.rawQuery("select c.c_id ,c.c_name, ((select CASE WHEN (sum(cr.amount)) IS Null THEN 0 ELSE sum(cr.amount) END from credit_master cr where c.c_id=cr.c_id)) - ((select CASE WHEN (sum(d.amount)) IS NULL THEN 0 ELSE sum(d.amount) END from debit_master d where c.c_id = d.c_id)) as Tot from customers c ORDER BY c.c_name ASC",null); 
     //c=db.rawQuery("select c.c_id ,c.c_name, ((select sum(cr.amount) from credit_master cr where c.c_id=cr.c_id)) - ((select sum(d.amount) from debit_master d where c.c_id = d.c_id)) as Tot from customers c",null); 
     try { 
      if (c!=null){ 
       if(c.moveToFirst()){ 
        Map<String,String> tem = new HashMap<String ,String>(); 
        tem.clear(); 
        arrayList.clear(); 
        listView.setAdapter(null); 
        int cnt = c.getCount(); 
        Toast.makeText(getApplicationContext(),""+cnt,Toast.LENGTH_SHORT).show(); 
        do { 

         tem = new HashMap<String,String>(); 
         tem.clear(); 

         tem.put(FIRST_COLUMN, c.getString(0)); 
         tem.put(SECOND_COLUMN,c.getString(1)); 
         tem.put(THIRD_COLUMN,c.getString(2)); 
         arrayList.add((HashMap<String, String>) tem); 
        }while (c.moveToNext()); 
       } 
      } 

     }catch (Exception e){ 
      Toast.makeText(getApplicationContext(),"Error"+e,Toast.LENGTH_LONG).show(); 

     } 

     ListViewAdapter adapter = new ListViewAdapter(this,arrayList); 

     listView.setAdapter(adapter); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       TextView tv = (TextView) (view.findViewById(R.id.cid)); 

       int str = Integer.parseInt(tv.getText().toString()); 

       Toast.makeText(AccDisplay.this,"Clicked"+str,Toast.LENGTH_LONG).show(); 

       Intent intent = new Intent(AccDisplay.this,Details.class); 
       intent.putExtra("name",str); 
       startActivity(intent); 
      } 
     }); 



    } 



    protected void onRestart(){ 
     super.onRestart(); 
     Intent inte = getIntent(); 
     finish(); 
     startActivity(inte); 
    } 
} 

活動。

異なるアクティビティで各TextViewの異なる色を表示したいとします。

私はこれを試してみましたが、私はOnItemClickListener中のTextViewの色を変更することができ

LayoutInflator inflator = (LayoutInflator)getSystemService(Context.LAYOUT_INFLATOR_SERVICE); 

View vi = inflator.inflate(R.layout.column,null); 

TextView tv = (TextView) vi.findViewById(R.id.amt); 

tv.setTextColor(Color.BLACK); 

を動作しませんでしたが、私は、データを表示しながら色を表示します。

私は、同じアダプタクラスとcolumn.xmlレイアウトを使用して、リストビュー内にデータを表示するDebit/Creditアクティビティを持っています。

TextView1を黒色フォントで表示し、TextView2を緑色でアクティビティ1で大きなフォントサイズで表示したいと考えています。また、さまざまなアクティビティで異なる色を表示したいとします。

+0

プログラムでこれを行う必要はありません。私はアンドロイド:textColor = "@ color/Black"でXML自体の色を設定しました –

+0

私は既に1つのTextViewに緑色を与えました。しかし、私はレイアウトファイルを再利用しているので、さまざまなアクティビティに異なる色を表示したい。 –

+0

さて、あなたは 'ArrayList'色をアダプタに渡すことができるかもしれません。 'Activity'から異なる色を追加してください。 –

答えて

0

他のアクティビティで使用しているものと同じアダプタを使用している場合は、アクティビティを識別するためにアダプタコンストラクタ内の異なるフラグをアダプタに渡すことができ、アダプタのTextViewにプログラムによって設定されたフラグに従って条件を設定できます。 textView.setTextColor(put_your_color);

関連する問題