android用数组添加表行

时间:2012-05-10 14:13:41

标签: java android xml view row

我目前正在使用列表视图但这对我不起作用所以我想要使用表视图和行来实现相同的效果。例如,我有一个json feed和新闻故事,每个新闻故事都会创建一个包含图像和textview的行,并用json中的数据填充它。

所以我的问题是,是否有人知道如何做到这一点?

这是我到目前为止所拥有的:

<?xml version="1.0" encoding="utf-8"?>


<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white">

   <include layout="@layout/header" />
   <include layout="@layout/redcell" />

   <TableRow

       android:id="@+id/tableRow1"
       android:layout_width="wrap_content"
       android:layout_height="100dp" >


      <TextView

        android:id="@+id/fixtures_text"
        android:layout_width="match_parent"
        android:layout_height="60dp"

        android:gravity="center"
        android:text="@string/leagues"
        android:textColor="@color/white"
        android:textSize="25dp"
        android:textStyle="bold"/>




   </TableRow>

   <include layout="@layout/redcell" />

   <TableRow
       android:id="@+id/tableRow2"
       android:layout_width="wrap_content"
       android:layout_height="100dp" >


      <TextView

        android:id="@+id/_text"
        android:layout_width="match_parent"
        android:layout_height="60dp"

        android:gravity="center"
        android:text="@string/leagues"
        android:textColor="@color/white"
        android:textSize="25dp"
        android:textStyle="bold"/>

   </TableRow>

    <include layout="@layout/redcell" />

活性:

public class HomeActivity extends ListActivity {

    private static final String apiKey = "67htj4455jsd345jj956id"; 
    private static final String apiUser = "android";
    private static final String ChosenTeam = null;
    private static String ChosenMethod = null; 
    public String fulldata = null;
    public String chosenLeagueId = "40";
    public List<String> newsList = null;
    public int newsAmount = 0;
    private static final String ChosenMethodPref = null;





    long unixTimeStamp = System.currentTimeMillis() / 1000L;

    //add Time Stamp to URL


    //public String chosenMethod; 


    String newsFeedRequest = "1.0/website/" + chosenLeagueId + "/news?timestamp=" + unixTimeStamp;
    String fixturesFeedURL = "https://www.example.com/_services/api/" + newsFeedRequest;


    private static String buildHmacSignature(String pKey, String pStringToSign)
    {
      String lSignature = "None";
      try
      {
        Mac lMac = Mac.getInstance("HmacSHA256");
        SecretKeySpec lSecret = new SecretKeySpec(pKey.getBytes(), "HmacSHA256");
        lMac.init(lSecret);

        byte[] lDigest = lMac.doFinal(pStringToSign.getBytes());
        BigInteger lHash = new BigInteger(1, lDigest);
        lSignature = lHash.toString(16);
        if ((lSignature.length() % 2) != 0) {
          lSignature = "0" + lSignature;
        }
      }
      catch (NoSuchAlgorithmException lEx)
      {
        throw new RuntimeException("Problems calculating HMAC", lEx);
      }
      catch (InvalidKeyException lEx)
      {
        throw new RuntimeException("Problems calculating HMAC", lEx);
      }

      return lSignature;
    }


    public void checkPreferences(){


        SharedPreferences preferences = getSharedPreferences("prefs", Context.MODE_PRIVATE);
        final String ChosenMethodPref = preferences.getString("ChosenMethod", ChosenMethod);
        Log.v("myapp", "ChosenMethod Home = " + ChosenMethodPref);

         if (ChosenMethodPref.equals("Team")) {
             setContentView(R.layout.homeactteam);
             newsAmount = 5;
             TextView redHeaderText = (TextView) findViewById(R.id.redheadertext);
             redHeaderText.setText("Latest League Fixture");



         } else {
             setContentView(R.layout.homeact);
             newsAmount = 10;

         }

}
    public void loadData(){String myhash = buildHmacSignature(apiKey, fixturesFeedURL);





    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(fixturesFeedURL);

    List<NameValuePair> pairs = new ArrayList<NameValuePair>();
    pairs.add(new BasicNameValuePair("requestToken", myhash));
    pairs.add(new BasicNameValuePair("apiUser", apiUser));

    try {
        post.setEntity (new UrlEncodedFormEntity(pairs));
        HttpResponse response = client.execute(post);
        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
        String json = reader.readLine();
        fulldata = String.valueOf(json);
        Log.v("myApp","newsdata" + fulldata);
        newsList = new ArrayList<String>();
        JSONObject obj = new JSONObject(json);    
        JSONObject objData = obj.getJSONObject("data");
        JSONArray jArray = objData.getJSONArray("news");


           for(int t = 0; t < newsAmount; t++){
               JSONObject newsTitleDict = jArray.getJSONObject(t);


               newsList.add(newsTitleDict.getString("title"));

           }


    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    setListAdapter ( new ArrayAdapter<String>(this, R.layout.single_item, newsList));

       ListView list = getListView();

        list.setTextFilterEnabled(true);



    }   


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        checkPreferences();
        loadData();


        Button backbtn = (Button) findViewById(R.id.backbtn);

        //Listening to button event
        backbtn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                //Starting a new Intent
                Intent previousScreen = new Intent(getApplicationContext(), ChooseTeamActivity.class);
                ChosenMethod = "null";
                SharedPreferences preferences = getSharedPreferences("prefs", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = preferences.edit();
                editor.putString("ChosenMethod", ChosenMethod);            
                editor.commit();
                previousScreen.putExtra("FullData", fulldata);
                startActivity(previousScreen);


            }
        });




    }











@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (item.getItemId() == R.id.home) {

        startActivity(new Intent(HomeActivity.this, HomeActivity.class));

        return(true);
  }


    if (item.getItemId() == R.id.match) {

        startActivity(new Intent(HomeActivity.this, MatchActivity.class));

        return(true);
  }



    if (item.getItemId() == R.id.teams) {

        startActivity(new Intent(HomeActivity.this, TeamsActivity.class));

        return(true);
  }



    if (item.getItemId() == R.id.twitter) {

        startActivity(new Intent(HomeActivity.this, TwitterActivity.class));

        return(true);
  }

    if (item.getItemId() == R.id.info) {

        startActivity(new Intent(HomeActivity.this, InfoActivity.class));

        return(true);
  }


    return(super.onOptionsItemSelected(item));


}



}

1 个答案:

答案 0 :(得分:0)

您可以设置一个自定义适配器,将ArrayAdapter扩展为ListActivity使用的适配器。在该自定义适配器的getView()方法中,您可以加载新闻列表中每个项目的图像和文本。

具有水平方向的简单LinearLayout可能最适合自定义适配器中的行布局。如果将TextView的layout_weight设置为1并使图像保留为layout_weight,则会将图像推送到行的一侧。